引言:
你是否遇到过这样的场景:业务高峰期,应用响应越来越慢,数据库CPU飙升,最终整个系统被拖垮。慢查询日志里,一条条简单的SQL竟然扫描了数百万行数据。
SQL优化,是每个后端开发者和DBA的必修课。它不仅是“加个索引”那么简单,更是一种对数据库查询原理的深度理解。
为什么你的SQL跑得慢?
大部分性能问题,根源在于“全表扫描”和“索引失效”。我们来看看几个典型的误区:
- SELECT * 横行:返回不需要的列,增加IO和网络开销,更重要的是,无法使用覆盖索引;
- 隐式类型转换:字段是VARCHAR,传入的是INT,索引直接失效;
- 索引列上做运算:如WHERE DATE(create_time) = '2026-07-06',导致无法走索引;
- 深分页查询:LIMIT 100000, 10,数据库需要丢弃前10万条数据,成本极高;
打开网易新闻 查看精彩图片
三条核心优化方法论:
索引设计要精准:
- 遵循最左前缀原则,把区分度高的列放在联合索引最左边;
- 优先考虑覆盖索引,让索引覆盖所有查询字段,减少回表;
查询语句要克制:
- 能用BETWEEN不用IN,能用IN不用OR(在特定场景下);
- 避免不等于(!=、<>)和IS NULL导致索引失效;
执行计划是底线:
- 任何上线前的SQL,必须经过EXPLAIN审核;
- 重点关注 type 列:至少要达到 range 级别,争取ref或 eq_ref,杜绝ALL(全表扫描);
打开网易新闻 查看精彩图片
SQL优化没有银弹,是一场关于“取舍”的艺术——用空间换时间(加索引),用冗余换性能(反范式设计)。
记住:慢SQL不仅是技术问题,更是稳定性问题。优化每一行查询,是对用户每一次点击的尊重。
热门跟贴