我是小耶,干运营半路出家的野生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不愁。
你有没有遇到过“明明建了索引,就是不走”的玄学情况?评论区分享,一起破案。