索引优化意见
- 满足最左前匹配原则
- 建立索引的列,不允许为 null
- 更新十分频繁的字段上不宜建立索引
- 模糊查询
like %abc%
不走索引,而like abc%
走索引 - 数据类型出现隐式转换的时候不会命中索引,特别是当列类型是字符串
- 如果有 or, 则 or 两边的列都要加索引才会走索引 ??
- 如果是 and, 只要有一列加索引,查询就会走索引?? 如
a =1 and a=2
- 如果
select * from t where a=1
, 其中 a 是索引列,但优化器显示扫全表,原因可能是返回的结果 大于总数据的30% - 范围条件查询可以命中索引,
<、<=、>、>=、between
- sql中带有计算或者函数则不会用索引, 如
select * from t where a+1 > 0
- 利用覆盖索引进行查询,避免回表
- 最好为每个表加主键
- 避免使用
select *
,指明返回的列 - 在Join表的时候使用相当类型的例,并将其索引
- 尽可能将表字段设计成
not null