MySQL 性能优化・诗意化记忆

覆盖索引、explain、SQL、表设计、锁、配置,古风短句,面试背诵向

总起

库中万绪藏千行,慢索翻寻耗时光。 优化不从一处取,表、索、SQL、锁与章。

一、表结构设计优化

plaintext

复制代码
建表先把范式量,适度冗余莫过僵。
字段类型宜精简,大文本莫入寻常。
非空约束勤加设,默认值补空位荒。
主键自增为上策,乱序索引裂篇章。
分库分表逢海量,冷热数据两厢藏。

记忆点:

  • 适度反范式,不要死磕三范式
  • 小类型优先,char/varchar 选对,blob/text 尽量移出主表
  • 主键尽量自增,无序主键会造成索引页分裂
  • 大数据量考虑分库分表、冷热分离

二、索引核心(重中之重)

plaintext

复制代码
索引如书目录章,快寻记录少奔忙。
B+树聚簇存主引,二级索引携键行。
最左匹配须恪守,失效条件记端详。
like%前通索引废,隐式转换路即亡。
or无引全表扫,函数运算引无光。
冗余索引当清理,独一索引防乱章。
并非多索引便好,写增开销暗自伤。

记忆点索引失效场景:

  1. like 以 % 开头
  2. 索引列做函数、运算
  3. 隐式类型转换
  4. or 条件一侧无索引
  5. 违背最左前缀原则

聚簇索引:数据就在索引叶子;二级索引存主键,回表拿数据。 覆盖索引:查询字段全在索引,免回表,性能大提升。

覆盖索引

plaintext

复制代码
查询字段索引藏,不必回表访本行。
少读磁盘少耗费,覆盖索引是良方。

三、explain 执行计划

plaintext

复制代码
Explain览行路方,type列里辨短长。
system const优为上,eq_ref ref次第扬。
range仅扫区间内,index遍历索引章。
all全表全盘扫,此景出现要提防。

Extra字段细端详,using filesort排序伤。
using temporary建临时,两害相逢性能僵。
using index覆盖好,using where条件量。

type 优先级:system > const > eq_ref > ref > range > index > ALL

  • ALL:全表扫描,尽量消灭
  • Using filesort:文件排序,消耗大
  • Using temporary:临时表,多出现 group by、union

四、SQL 语句优化

plaintext

复制代码
select莫用星号扬,按需取列减行囊。
where早筛缩数据集,join少连表数行。
limit深翻慎偏移,分页大坑要提防。
in集过大性能降,exists斟酌两相量。
避免大事务久悬置,锁占长时祸祸殃。
join关联建索引,笛卡尔积切莫尝。

要点:

  • 禁止select *
  • 大 offset 分页不要直接 limit offset,size
  • in 集合不要过大
  • join 关联字段务必建索引,控制 join 表数量
  • 大事务拆分,事务尽量小而短

五、锁与事务优化

plaintext

复制代码
行锁粒度细如芒,表锁横扫满仓伤。
意向锁辅行表判,间隙锁防幻读殃。
事务简短速提交,久持锁柄众争忙。
隔离级别慎调高,RC多数业务彰。

RC 读已提交,大部分业务使用;RR 可防幻读,但有间隙锁,容易死锁。 事务越长,持有锁时间越久,冲突、死锁概率飙升。

六、配置层面优化

plaintext

复制代码
缓冲池是核心仓,innodb_buffer_pool_size。
内存大半归此用,热数据驻内存疆。
日志刷盘调参数,平衡性能与安康。
慢查询日志开启,捕获慢SQL的祸殃。

重点:innodb_buffer_pool_size,一般设置服务器物理内存 50%‑70%,缓存索引 + 数据页,减少磁盘 IO。

完整七言背诵诗

plaintext

复制代码
建表权衡范式章,字段精简忌铺张。
自增主键防分裂,大字段要避主行。

B加树作目录章,最左匹配不可忘。
前通like隐转换,函数运算索引亡。
覆盖索引免回表,多引徒增写耗伤。

Explain看type行,ALL全扫要提防。
filesort与临时表,Extra见此细思量。

SQL勿用星号扬,where筛减数据量。
分页深移需巧计,大in慎用细权衡。
join字段建索引,大事务要速收场。

行锁细粒度为上,长持锁柄起争攘。
缓冲池内存多予,慢志捕得劣SQL。
调优本是权衡术,没有灵丹万事昌。

极简面试口诀

表要简,键要增; 索引善,忌失效;覆盖免回表; explain 看 type,拒 ALL,避临时排序; SQL 少星号,事务短,join 建索引; 锁勿久持有,缓冲池要够,慢查把祸找

相关推荐
TDengine (老段)12 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
螺蛳粉 螺蛳粉14 小时前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
泡泡鱼(敲代码中)16 小时前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee
政企项目老覃16 小时前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm
这个DBA有点耶18 小时前
从OLTP到OLAP到HTAP:数据库负载分类的技术演进与选型指南
数据库·mysql·架构
YangYang9YangYan20 小时前
商业数据分析校招项目怎么选,附项目设计与简历包装思路
大数据·数据库·数据分析
李白客20 小时前
数据库培训怎么选?零基础到DBA的学习路线与机构认证对比(2026)
数据库·学习
shark-chili20 小时前
关于AI辅助编程的认知
数据库·人工智能·redis·macos·缓存
SendTomo20 小时前
.ico透明图标在线生成下载平台深度解析
大数据·数据结构·数据库·数据仓库·个人开发
蓝速科技20 小时前
国产化信创终端等保合规核心防护与落地方案丨蓝速科技
大数据·运维·数据库·人工智能·科技