SQL 调优需要掌握的知识

SQL 调优本质上就一句话:

减少 MySQL 扫描的数据量,减少排序、临时表和回表,让数据库用尽可能低的成本拿到结果。

更具体地说:

c 复制代码
全表扫描慢,是因为读的数据太多
索引快,是因为 B+ 树可以快速定位范围
复合索引快,是因为它可以同时服务过滤和排序
覆盖索引快,是因为减少了回表
深分页慢,是因为扫描并丢弃了大量数据
函数、前置模糊匹配慢,是因为破坏了索引的有序性

sql执行过程

sql 复制代码
SELECT id, username
FROM t_user
WHERE create_time < '2025-01-01 12:00:00'
  AND status = 1
ORDER BY age ASC;

当进行sql扫描的时候,SQL会收集需要的字段,并不是把一行数据全都加到暂存区

读取:从 InnoDB 数据页里把记录读出来

暂存:MySQL 为了排序、分组、返回结果临时保存一些字段

复制代码
InnoDB:把一行记录读出来给 MySQL
MySQL:判断 WHERE
MySQL:只把后面要排序/返回的字段放进临时结构

需要的字段

sql 复制代码
status
age
create_time
id
username
相关推荐
fofantasy2 小时前
NSK LH12AN 微型导轨技术手册
运维·网络·数据库·经验分享·规格说明书
杨运交2 小时前
[032][缓存模块]基于Redis Bitmap的用户行为统计实战:签到与日活分析
数据库·redis·缓存
一 乐2 小时前
家政服务管理系统|基于springboot + vue家政服务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·家政服务管理系统
努力成为AK大王4 小时前
并发编程的核心挑战、优化方案与核心知识点总结
java·开发语言·数据库
En^_^Joy5 小时前
Django开发:模板系统入门指南
数据库·django·sqlite
无关86886 小时前
Redis Bitmaps 用户签到系统设计方案
数据库·redis·缓存
江华森6 小时前
FastAPI 极速开发指南 — 从零到生产级 API 实战
数据库·fastapi
老纪7 小时前
Redis分布式锁进第九零篇
数据库·redis·分布式