MySQL索引建立原则

一、索引的建立原则
(1)、对查询频次较高, 且数据量比较大的表, 建立索引。
(2)、索引字段的选择, 最佳候选列应当从where子句的条件中提取, 如果where子句中的组合比较多, 那么应当挑选最常用, 过滤效果最好的列的组合。
(3)、如果where后有多个条件经常被用到, 建议建立复合索引, 复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引。
    复合索引命名规则 index_表名_列名1_列名2_列名3,比如:create index idx_seller_name_sta_addr on tb_seller(name, status, address)
(4)、使用唯一索引, 区分度越高, 使用索引的效率越高。
(5)、索引并非越多越好, 如果该表增、删、改操作较多, 慎重选择建立索引, 过多索引会降低表维护效率。
(6)、使用短索引(索引列的值要尽量短), 提高索引访问时的I/O效率, 因此也相应提升了查询效率。
(7)、多表连接的字段上需要建立索引,这样可以极大提高表连接的效率。
(8)、ORDER BY、GROUP BY、DISTINCT 和 UNION 等操作的字段,排序操作非常消耗时间。添加索引能减少甚至避免排序,提高查询效率。

二、如何避免索引失效
(1)、复合索引遵循最左匹配法则
     如果在查询的时候使用了复合索引, 要遵循最左匹配法则, 也就是查询从索引的最左列开始, 并且不能跳过索引中的列;如果不包含最左边的索引列, 则其他索引不生效;如果包含了最左边的索引列, 但是跳过了一列直接索引了复合索引的第三列, 则第三列的索引不生效。
(2)、不要在索引列上使用运算, 否则索引也会失效。
(3)、where条件等号左右的字段类型不一致,可能产生隐式转换, 造成索引失效。
(4)、尽量使用覆盖索引, 避免select *, 这样能提高查询效率。
(5)、or关键字连接
  用or分割开的条件, 如果or前面的列有索引, or后面的列没有索引, 那么查询的时候索引会失效, 如果一定要用or查询, 可以考虑下or连接的条件列都加索引, 这样就不会失效了。
(6)、like模糊查询
    在使用like模糊查询时, 如果like%也就是%加在后面索引不会失效, 如果%like或%like%也就是%加在前面, 索引会失效。
(7)、如果查询的列占整张表的绝大多数, 那么就会全表扫描, 不会走索引。 所以在查询的时候走不走索引不能百分百肯定。
    也就是说如果查找一个稀有数据, 如果建立了索引, 就会走索引。 如果查询的数据表达绝大多数都符合条件, 就全表扫描, 不走索引。

posted @ 2022-05-13 17:05  业余砖家  阅读(649)  评论(0编辑  收藏  举报