SQL 优化:索引与 SQL 重写实战
文章目录
- [SQL 优化:索引与 SQL 重写实战](#SQL 优化:索引与 SQL 重写实战)
索引不是越多越好
索引能加速查询,也会拖慢写入。表上索引太多,插入、更新、删除都会更重,所以索引设计一定是围绕高频查询来的,不是把字段全打一遍。
联合索引怎么排
联合索引通常遵循"等值在前、范围在后、选择性高的字段优先"的思路。因为一旦遇到范围条件,后面的字段往往就没法继续充分利用了。
这几个规则很实用
- 最左前缀原则要记住
where、order by、group by要尽量和索引顺序一致- 覆盖索引能少回表就少回表
- 深分页尽量改成"上一页最后一条 id + limit"
SQL 重写示例
sql
-- 不太友好
select id, name from user where status = 1 order by create_time desc limit 100000, 20;
-- 更稳
select id, name from user
where status = 1 and create_time < ?
order by create_time desc
limit 20;
还有两个常见坑
- 在索引列上套函数,索引直接失效
- 以为有索引就万事大吉,结果返回列太多,回表还是很重
结论
索引负责"少扫",SQL 重写负责"少算",这两件事要一起看。