1.不在任何索引列上做计算,函数操作
这样会导致索引失效。
2.遵循最左原则
3.范围查询的列放在最右侧
这句话的意思是在联合索引中,如果一个列是做精准查询的,另一个列是做范围查询的,那把精准查询的列放在最左边,这样最左原则的效率更高。
4.覆盖索引尽量用
5.!=要慎用
结合前面所说的扫描区间,!=是从!=的值截断,分成了两块儿,进行扫描,这和全表扫描区别不大,很多时候mysql就走全表扫描了。
6.null要慎用
7.like要当心
%尽量不放在左面,如果非放不可,那么考虑使用索引下推。
8.字符类型加引号
否则会引起索引失效,原理和做运算一样。即使varchar是数字,也要加引号。
9.or要慎用
假如a列有索引,b列没索引,看如下语句:
select * from table where a='xxx' or b='xxx'
这句sql,要走全表扫描,因为b列没有索引,肯定要走全表扫描进行b条件过滤。
即使全部是索引列,多次使用or,也有可能因为数据过多而直接走全表扫描。
如何优化呢?用union代替or,让能走索引的部分走索引,来优化。
10.排序,分组字段加索引
11.排序要当心
在同一个联合索引中,asc,desc尽量不混用;
不同索引的两个列排序,不会走索引;
12.不用select*
13.尽量使用主键自增
因为B+tree是按顺序排列的,这样对B+tree的构建有好处
14.应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。
爆肝,52条SQL语句,性能优化,干货必收藏 !