一. 索引的建立原则
索引的设计需要遵循一些已有的原则, 这样便于提升索引的使用效率, 更高效的使用索引.
-
对查询频次较高, 且数据量比较大的表, 建立索引.
-
索引字段的选择, 最佳候选列应当从where子句的条件中提取, 如果where子句中的组合比较多, 那么应当挑选最常用, 过滤效果最好的列的组合.
-
如果where后有多个条件经常被用到, 建议建立符合 索引, 复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引.
复合索引命名规则 index_表名_列名1_列名2_列明3
比如:create index idx_seller_name_sta_addr on tb_seller(name, status, address)
复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引. 最左前缀法则后面会详细介绍~
-
使用唯一索引, 区分度越高, 使用索引的效率越高.
-
索引并非越多越好, 如果该表赠,删,改操作较多, 慎重选择建立索引, 过多索引会降低表维护效率.
-
使用短索引, 提高索引访问时的I/O效率, 因此也相应提升了Mysql查询效率.
-
多表连接的字段上需要建立索引,这样可以极大提高表连接的效率.
-
排序字段上, 因为排序效率低, 添加索引能提高查询效率.
二.如何避免索引失效
- 遵循最左前缀法则
如果在查询的时候, 使用了复合索引, 要遵循最左前缀法则, 也就是查询从索引的最左列开始, 并且不能跳过索引中的列.如果不包含最左边的索引列, 则其他索引不生效;如果包含了最左边的索引列, 但是跳过了一列直接索引了复合索引的第三列, 则第三列的索引不生效.
-
不要在索引上使用运算,