1、当使用索引列进行查询的时候见谅不要使用表达式,把计算放到业务层而不是数据库层
select id from table where id+1=5; 优先级范围为ref
select id from table where id=4; 优先级范围为count
2、尽量使用主键查询,而不是其他索引,因此主键查询不会触发回表查询
3、使用前缀索引
4、使用索引扫描来排序
5、union all,in,or都能够使用索引,但是推荐使用in
6、范围列可以用到索引
但是where条件中的范围查找后的条件不会走索引
select * from dept where a>10 and b=1; b不会走索引
7、强制类型转换会全表扫描
phone存在索引,phone的类型为varchar,上图中第一条sql由int强制转换为varchar,不走索引
8、更新十分频繁,数据分区不高的字段上不宜建立索引
更新会变更B+树,更新频繁的字段会降低数据库性能
9、创建索引的列,不允许为null,可能会得到不符合预期的结果
10、当需要进行表连接的时候,最好不要超过三张表,因为需要join的字段类型必须一致
11、如果明确知道只有一条结果返回,limit1能够提高效率
12、单表索引建议控制在5个以内
13、单索引字段不允许超过5个(组合索引)