10.16

建了索引不代表一定用得上,下面这8种情况索引会失效,我踩过一半。

  1. 对索引列做运算:where id + 1 = 5,改成where id = 4。

  2. 对索引列用函数:where year(create_time) = 2024,改成范围查询。

  3. 隐式类型转换:字段是varchar,传了数字,MySQL会转成double比较,索引失效。

  4. like以%开头:like '%abc'失效,like 'abc%'有效。

  5. 联合索引不满足最左前缀:索引(a,b,c),查b=1用不上,查a=1 and c=1只能用到a。

  6. or连接非索引列:where a=1 or b=2,b没索引,整体失效。

  7. 使用!=或<>:优化器可能判断全表扫描更快。

  8. 数据量少或区分度低:性别字段只有男女,建索引也没意义。

排查方法:explain看type和key。type是ALL就是全表扫,ref和range算正常。养成写完SQL用explain看一眼的习惯,比事后优化省事。

posted @ 2026-10-16 14:24  一水尘风  阅读(5)  评论(0)    收藏  举报