1,最左前缀法则
如果为一张表创建了多列的组合索引,要遵守最左前缀法则。就是指查询从索引的最左前列开始并且不要跳过索引中的列。(因为Mysql的InnoDB引擎的索引树是一个按顺利排序存储的数据结构(B+TREE),如果是组合索引就会按照最左边的那个字段进行ascll码排序,假如第一个字段值相同则会是同第二个字段,以此类推)
2,不在索引列上做任何计算、函数、类型转换,可能会导致索引失效而升级为全表扫描
举例子:select * from user where min(age) = 30;
3,尽量使用覆盖索引(访问查询索引的字段),减少 select * 语句
比如:一个用户表中name,age都有索引。
select name,age from user where name ='angy' and age =30;
4,Mysql 在使用不等于(!=或者<>),not in , not exists的时候无法使用索引会导致全表扫描
举例子:select * from user where age != 30;
5,在使用is null , is not null 一般情况下也无法使用索引。
举例子: select * from user where name is null;
6,使用like进行模糊查询时,以通配符开头('%abc..')mysql索引失效会变成全表扫描操作。(如果硬要这么做,可以使用外部的搜索引擎辅助)
举例子: select * from user where name like '%angy';
7,查询字段是字符串如果不加引号索引失效
举例子:select * from user where name = 1000;(正确写法 select * from user where name = '1000';)
8,少用or或in,用它查询时,mysql不一定使用索引,是否使用索引会根据mysql优化器做出选择。
如果要检查mysql查询语句是否使用到索引,访问类型可以使用explain进行分析
举例子: explain select * from user where ange = 40;
感谢阅读。