减少索引扫描(Index Scan)开销通常从“让索引更高效、让扫描更少、让返回更轻”三个方向入手。下面按常见场景给你一套实用思路:
-- bad
WHERE DATE(create_time) = '2024-01-01'
-- good
WHERE create_time >= '2024-01-01'
AND create_time < '2024-01-02'
INDEX(a, b, c)
能用到索引的查询:
WHERE a=?
WHERE a=? AND b=?
不能用到:
WHERE b=?
WHERE phone = 1380000000 -- phone 是 varchar
会导致索引失效。
INDEX(user_id, status)
查询:
SELECT user_id, status
FROM order
WHERE user_id = 1
不需要回表。
✅ 把经常查询的字段放进索引
INDEX(name(20))
!= / NOT INOR 非全部索引列LIKE '%xx'ORDER BY create_time
INDEX(create_time)
避免 filesort。
-- bad
LIMIT 100000, 10
-- good
WHERE id > 100000
ORDER BY id
LIMIT 10
innodb_buffer_pool_size ↑(缓存索引)read_aheadANALYZE TABLE如果你能给我:
我可以直接帮你针对性优化。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。