编辑
2024-09-09
后端技术
0
请注意,本文编写于 135 天前,最后修改于 120 天前,其中某些信息可能已经过时。

目录

适合建立索引的场景和不适合建立索引的场景
索引失效的场景

1、建索引时,要建立区分度高的索引。区分度高的索引,可以快速得定位数据,区分度太低,无法有效的利用索引,可能需要扫描大量数据页,和不使用索引没什么差别。如果是组合索引,也尽量以区分度更高的排在前面。

2、联合索引注意最左匹配原则:按照从左到右的顺序匹配,MySQL会一直向右匹配索引直到遇到范围查询(>、<、between、like)然后停止匹配。

3、可能的话尽量只利用索引覆盖,可以减少回表操作,提升效率。

4、避免索引失效的原则:禁止对索引字段使用函数、运算符操作,会使索引失效。

5、避免非必要的类型转换,字符串字段使用数值进行比较的时候会导致索引无效。

6、模糊查询'%value%'会使索引无效,变为全表扫描,因为无法判断扫描的区间,但是'value%'是可以有效利用索引。

7、索引覆盖排序字段,这样可以减少排序步骤,提升查询效率

8、尽量的扩展索引,非必要不新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。

适合建立索引的场景和不适合建立索引的场景

适合的场景

​ 1、主键自动建立唯一索引

​ 2、频繁作为查询条件的字段应该创建索引

​ 3、查询中与其他表关联的字段,外键关系创建索引

​ 4、频繁更新的字段不适合创建索引

​ 5、where条件里用不到的字段不创建索引

​ 6、在高并发下倾向创建组合索引

​ 7、查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

​ 8、查询中统计或者分组字段

不适合的场景

​ 1、表记录太少[mysql 300W以内够用]

​ 2、经常增删改的表

​ 3、数据重复且分布平均的表字段,因此应该只为经常查询和排序的数据列建立索引。如果某个数据列包含许多重复内容,为它建立索引没有太大的实际意义。

索引失效的场景

​ 1、全值匹配没有遵循最佳左前缀法则

​ 2、最佳左前缀法则--如果索引了多列,要遵循最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。

​ 3、不要在索引列上做任何操作(计算、函数、类型转换),做操作会导致索引失效而转向全表扫描

​ 4、存储引擎不能使用索引中范围条件右边的列[范围条件放到最后 > < ]

​ 5、尽量使用覆盖索引(只访问索引查询、索引列和查询列一致),减少select *

​ 6、mysql在使用不等于的时候无法使用索引会导致全表扫描

​ 7、is null,is not null 无法使用索引

​ 8、like以通配符开头,mysql索引失效会变成全表扫描 [建覆盖索引,可以在%开头的情况下,索引不失效]

​ 9、字符串不加单引号索引号失效

​ 10、少用or,用or连接会让索引失效

本文作者:whitebear

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!