SQL优化(2)-索引使用、设计规则
索引使用规则:设计
- 全值匹配,索引中全部列都指定具体值。该状况下,索引生效,执行效率高。
- 最左前缀法则:若是索引了多列,要遵照最左前缀法则。指的是查询从索引的最左前列开始,而且不跳过索引中的列。匹配最左前缀法则,走索引。违反最左前缀法则,索引失效。若是符合最左法则,可是出现跳跃某一列,只有最左列索引生效。
- 范围查询右侧列,不使用索引
- 在索引上作运算操做,索引失效
- 字符串不加单引号,索引失效
- 使用or分隔开的条件,若是or前面使用索引列、后面没有索引列,那么涉及的索引都不会被用到
- 以%开头的Like模糊查询,索引失效。解决方案:经过覆盖索引
- 若是MySQL评估使用索引比全表更慢,则不使用索引
- is NULL,is NOT有时索引失效。实验中: NULL查询条件中IS NULL,当命中结果数量小于40%的时候,会走索引。查询条件中的IS NOT NULL,命中结果数小于30%的时候,会走索引。
- in,not in有时索引失效。
- 尽可能使用覆盖索引,避免select *
索引设计原则:索引
- 对查询频次较高,且数据量比较大的表创建索引。
- 索引字段的选择,最佳候选列应当从where子句的条件中提取,若是where子句中的组合比较多,那么应当挑选最经常使用、过滤效果最好的列的组合。
- 使用惟一索引,区分度越高,使用索引的效率越高。
- 索引能够有效的提高查询数据的效率,但索引数量不是多多益善,索引越多,维护索引的代价天然也就水涨船高。对于插入、更新、删除等DML操做比较频繁的表来讲,索引过多,会引入至关高的维护代价,下降DML操做的效率,增长相应操做的时间消耗。另外索引过多的话,MySQL也会犯选择困难病,虽然最终仍然会找到一个可用的索引,但无疑提升了选择的代价。使用短索引,索引建立以后也是使用硬盘来存储的,所以提高索引访问的I/O效率,也能够提高整体的访问效率。假如构成索引的字段总长度比较短,那么在给定大小的存储块内能够存储更多的索引值,相应的能够有效的提高MySQL访问索引的I/O效率。
- 利用最左前缀,N个列组合而成的组合索引,那么至关因而建立了N个索引,若是查询时where子句中使用了组成该索引的前几个字段,那么这条查询SQL能够利用组合索引来提高查询效率。
欢迎关注本站公众号,获取更多信息