1、全值匹配
查询语句尽量使用全值匹配。
2、左前缀原则
如果一个索引是组合索引,索引了多列,要遵循左前缀原则,即查询从索引的左前缀开始,不能跳过索引中间的列。
3、不要在索引列上操作
操作包括:计算、函数、自动或手动的类型转换,不要在索引列上做上述任何操作,否则索引失效并转为全表扫描
4、范围条件右边的列索引全失效
当组合索引中出现范围条件,那么该范围条件右边的列索引全部失效。因此在设计和使用索引时,应把经常进行范围查询的列作为索引的最右列。
**5、按需取数据,少用select ***
在查询中少用select *,否则MySQL需要遍历结果列存在哪些字段。同时,应尽量使用覆盖索引,能避免二次查表
6、避免使用 != 或 <>
在使用不等于(!= 或 <>)时,无法使用索引,导致全表扫描。
7、避免is null 或 is not null
判断空值的查询条件索引失效,导致全表扫描。
8、避免like以通配符开头
查询条件like以通配符%开头,如 name like ("%abc"),索引失效,导致全表扫描。
那么如果业务需要必须要用通配符%开头怎么办?
答案是:使用覆盖索引
9、少用or
使用or来连接查询条件时,索引失效。
10、尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可,建立不必要索引会增加MySQL空间
11、如果确定有多少条数据,使用 limit 限制一下,MySQL在查找到对应条数的数据的时候,会停止继续查找
12、join 语法,尽量将小的表放在前面,在需要on的字段上,数据类型保持一致,并设置对应的索引,否则MySQL无法使用索引来join查询
13、=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式