欢迎来到天天文库
浏览记录
ID:25151791
大小:392.00 KB
页数:30页
时间:2018-11-18
《php面试大全-高级篇》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、PHP面试大全ZX1.1版版本说明:基于部分网络+个人+部分群网友帮助集合而成。如果有错误的地方,请联系QQ群群主:247823727修改完成版会重新发布个人博客:http://www.cnblogs.com/zx-admin/SVN地址:https://git.oschina.net/zxadmin/live_zphp高级部分1.编写SQL查找出以下表中TG的所有员工--仅提供向下查询DELIMITER$$DROPFUNCTIONIFEXISTSserch_user;CREATEFUNCTIONserch_user(dept_idINT
2、)RETURNSTEXTBEGINDECLAREchild_idTEXT;DECLAREtempTEXT;SETtemp='';SETchild_id=dept_id;WHILEchild_idISNOTNULLDOSETtemp=CONCAT(temp,',',child_id);SELECTGROUP_CONCAT(id)INTOchild_idFROMdeptsWHEREFIND_IN_SET(parent_id,child_id)>0;ENDWHILE;RETURNtemp;END;$$DELIMITER;#查询所有部门IDSEL
3、ECTserch_user(1);#查询所有的用户SELECT*FROM`user`WHEREFIND_IN_SET(dept_id,serch_user(1));第二种解法,自我链接:2.迷宫算法实现有出口点和入口点,中间有一堆障碍物,求出其中一个入口点到到出口点的最优的路径,DEMO用HTML+JS/PHP实现(要求可以任意设置出口和入口点和障碍物的位置,还有可以设置地图大小,需要做UI)。3.MySQL查询优化,MySQL索引优化存储引擎的选择ØMyisam:数据库并发不大,读多写少,而且都能很好的用到索引,sql语句比较简单的应用
4、,TB数据仓库ØInnodb:并发访问大,写操作比较多,有外键、事务等需求的应用,系统内存较大。1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。2.应尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。3.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:selectidfromtwherenumisnull可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:selectidfromt
5、wherenum=04.应尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:selectidfromtwherenum=10ornum=20可以这样查询:selectidfromtwherenum=10unionallselectidfromtwherenum=205.下面的查询也将导致全表扫描:selectidfromtwherenamelike'%abc%'若要提高效率,可以考虑全文检索。6.in和notin也要慎用,否则会导致全表扫描,如:selectidfromtwherenumin(1,
6、2,3)对于连续的数值,能用between就不要用in了:selectidfromtwherenumbetween1and37.如果在where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:selectidfromtwherenum=@num可以改为强制查询使用索引:selectidfromtwith(index(索引名))wherenu
7、m=@num8.应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:selectidfromtwherenum/2=100应改为:selectidfromtwherenum=100*29.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:selectidfromtwheresubstring(name,1,3)='abc'--name以abc开头的idselectidfromtwheredatediff(day,createdate,'2005-11-30
8、')=0--'2005-11-30'生成的id应改为:selectidfromtwherenamelike'abc%'selectidfromtwherecreatedate>='2005-1
此文档下载收益归作者所有