1、索引列的数据长度满足业务的情况下能少则少。
2、表中的索引并不是越多越好。
3、Where 条件中,like 9%, like %9%, like%9,三种方式都用不到索引。后两种方式对于索引是无效的。第一种9%是不确定的,决定于列的离散型,结论上讲可以用到,如果发现离散情况特别差的情况下,查询优化器觉得走索引查询性能更差,还不如全表扫描。
4、Where条件中 NOT IN 无法使用索引
5、多用指定查询,只返回自己想要的列,少用select *。
6、查询条件中使用函数,索引将会失效,这和列的离散型有关,一旦使用到函数,函数具有不确定性。
7、联合索引中,如果不是按照索引最左列开始查找,无法使用索引。
8、对联合索引精确匹配最左前列并范围匹配另一列,可以使用到索引。
9、联合索引中,如果查询有某个列的范围查询,其右边所有的列都无法使用索引。
避免全表扫描,合理建立索引
避免使用select * 明确所要查询的字段
SQL语句大写
尽量避免在where子句中使用!= ,<>操作符,因为不会使用索引,使用到where,order by尽量建立索引
where +<,<=,=,>,>=, LIKE‘abc%’这样会使用索引
避免使用模糊查询
遵循最左原则(在where子句中把索引字段放在前面)
尽量不用子查询(关联查询)
不需要获取全表数据的时候,不要查询全表数据,使用LIMIT来限制数据。