索引失效的5种常见写法:为什么加了索引查询还是慢

0 阅读1分钟

我是小耶,干运营半路出家的野生DBA——写功课只是为了我踩过的坑,你们别再踩了!

很多新手给字段加了索引,查询还是慢。不是索引没用,是你写的SQL让它没法用。

5种索引装睡的场景

1. 对索引列用了函数

WHERE DATE(order_date) = '2026-04-23'   -- ❌
WHERE order_date = '2026-04-23'        -- ✅

2. 对索引列做了运算

WHERE price + 10 > 100   -- ❌
WHERE price > 90         -- ✅

3. 类型不匹配

WHERE phone = 13800000000   -- ❌ phone是varchar,没加引号
WHERE phone = '13800000000' -- ✅

4. LIKE前置通配符

WHERE name LIKE '%张三'   -- ❌ 最前面的%导致索引失效
WHERE name LIKE '张三%'   -- ✅ 前缀匹配可用索引

5. OR连接的不同列,只有部分有索引

WHERE id = 1 OR name = '张三'   -- 只有id有索引,name没有,整个OR会全表扫描

快速验证方法

写完SQL,在前面加EXPLAIN。看key列:如果显示NULL,说明索引没用到;如果显示你建的索引名,那就放心了。

小耶在手,SQL不愁。

你有没有遇到过“明明建了索引,就是不走”的玄学情况?评论区分享,一起破案。