SQL优化-索引与SQL重写实战

SQL 优化:索引与 SQL 重写实战

文章目录

索引不是越多越好

索引能加速查询,也会拖慢写入。表上索引太多,插入、更新、删除都会更重,所以索引设计一定是围绕高频查询来的,不是把字段全打一遍。

联合索引怎么排

联合索引通常遵循"等值在前、范围在后、选择性高的字段优先"的思路。因为一旦遇到范围条件,后面的字段往往就没法继续充分利用了。

这几个规则很实用

  • 最左前缀原则要记住
  • whereorder bygroup 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 重写负责"少算",这两件事要一起看。