SQL 调优本质上就一句话减少 MySQL 扫描的数据量减少排序、临时表和回表让数据库用尽可能低的成本拿到结果。更具体地说全表扫描慢是因为读的数据太多 索引快是因为 B树可以快速定位范围 复合索引快是因为它可以同时服务过滤和排序 覆盖索引快是因为减少了回表 深分页慢是因为扫描并丢弃了大量数据 函数、前置模糊匹配慢是因为破坏了索引的有序性sql执行过程SELECTid,usernameFROMt_userWHEREcreate_time2025-01-01 12:00:00ANDstatus1ORDERBYageASC;当进行sql扫描的时候SQL会收集需要的字段并不是把一行数据全都加到暂存区读取从 InnoDB 数据页里把记录读出来暂存MySQL 为了排序、分组、返回结果临时保存一些字段InnoDB把一行记录读出来给 MySQL MySQL判断 WHERE MySQL只把后面要排序/返回的字段放进临时结构需要的字段statusage create_time id username