正确创建索引和索引失效

1.什么情况不适合创建索引?

  1. 列的离散程度不高:即使创建了索引,也不会走索引,因为需要额外的回表操作,它的cost可能会比全表扫表更高。
  2. 不经常查询的字段:创建索引会占用额外的存储开销、性能开销。
  3. 频繁更新的字段:频繁更新会导致频繁页分裂,需要迁移数据,会降低性能。
  4. 字段数据占用空间过大:会导致索引节点的数据页能存储的索引数量变少,从到导致索引的路数表少,深度表深,IO次数变多。(推荐使用前缀索引)
  5. 已经存在联合索引的首字段:无需重复创建索引。

2.什么情况索引会失效?

  1. 列的离散程度不高
  2. 负向查询(not in、!= 、<>): 导致使用索引检索是,无法判断大小,无法过滤数据。
  3. 索引字段上面有函数:索引上加上了函数,相当于改变了索引结构,无法使用索引检索数据。
  4. 最左匹配原则(like '%aaa%'): 导致使用索引检索是,无法判断大小,无法过滤数据。
  5. 没有使用联合索引第一个字段: 联合索引是数据是拼接的,没有第一个字段的数据,好比like '%aaa%' , 导致使用索引检索是,无法判断大小,无法过滤数据。
  6. 字符串索引的值不加引号:数据类型不一致,无法比较。
posted @ 2020-08-08 20:14  kancy  阅读(731)  评论(0编辑  收藏  举报