今天来学习一下MySQL优化技巧。面试
善用 explain
查看SQL执行计划sql
MySQL对于IN作了相应的优化,即将IN中的常量所有存储在一个数组里面,并且这个数组是排好序的。可是若是数值较多,产生的消耗也是比较大的。再例如:select id from table_name where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了;再或者使用链接来替换。数据库
对于null的判断会致使引擎放弃使用索引而进行全表扫描。数组
例如LIKE “%name”或者LIKE “%name%”,这种查询会致使索引失效而进行全表扫描。可是可使用LIKE “name%”。网络
好比select user_id,user_project from table_name where age*2=36;
性能
中对字段就好了算术运算,这会形成引擎放弃使用索引,建议改为学习
select user_id,user_project from table_name where age=36/2;
优化
举列来讲索引含有字段id,name,school
,能够直接用id字段,也能够id,name这样的顺序,可是name,school都没法使用这个索引。因此在建立联合索引的时候必定要注意索引字段顺序,经常使用的查询字段放在最前面。spa
对于联合索引来讲,若是存在范围查询,好比between,>,<等条件时,会形成后面的索引字段失效。code
select id,name from table_name limit 866613, 20
使用上述sql语句作分页的时候,可能有人会发现,随着表数据量的增长,直接使用limit分页查询会愈来愈慢。
优化的方法以下:能够取前一页的最大行数的id,而后根据这个最大的id来限制下一页的起点。好比此列中,上一页最大的id是866612。sql能够采用以下的写法。
select id,name from table_name where id> 866612 limit 20
有的时候MySQL优化器采起它认为合适的索引来检索sql语句,可是可能它所采用的索引并非咱们想要的。这时就能够采用force index来强制优化器使用咱们制定的索引。