mysql索引

一、索引失效场景

  • 查询条件中有or
  • 查询条件中的like模糊查询时以 '%xxx' 开头
  • 查询条件中的字段有字段使用了运算或者函数
  • 左连接查询或者右连接查询查询关联的字段编码格式不一样
  • 如果mysql使用全表扫描要比使用索引快,则不使用索引
  • 连接查询中,按照优化器顺序的第一张表不会走索引
1.外连接查询,A表关联B表,要在将优化器顺序的第二张表上关联的字段上加索引,而第一张表则无需加索引,无用的索引也会影响性能
2.内连接查询,内连接优化器本身就会根据索引情况,连接表的大小等去选择执行顺序了,内连接执行顺序是b、a,这样仍然可以用到a的索引
  • 如果查询中没有用到联合索引的第一个字段,则不会走索引
  • 联合索引Or失效
  • 联合索引 范围查询 > 部分索引失效
  • 用is null和is not null没注意字段不为空失效
如果字段不允许为空,则is null 和 is not null这两种情况索引都会失效。
如果字段允许为空,则is null走 ref 类型的索引,而is not null失效
  • 使用了select *
  • 使用not in 不会导致索引失效,使用不等于号不会导致索引失效,order by索引字段顺序不当不会导致索引失效

二、索引设计的几个建议

优先使用唯一索引,能够快速定位
为常用查询字段建索引
为排序、分组和联合查询字段建索引
一张表的索引数量不超过5个
表数据量少,可以不用建索引
尽量使用占用空间小的字段建索引
用idx_或unx_等前缀命名索引,方面查找
删除没用的索引,因为它会占一定空间

本文参考 原文链接:https://blog.csdn.net/qq_34202873/article/details/121108087

posted @ 2024-05-07 14:31  牛奶配苦瓜  阅读(22)  评论(0)    收藏  举报