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 建索引; 锁勿久持有,缓冲池要够,慢查把祸找

相关推荐
摇滚侠5 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试5 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_937767166 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_7 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl9 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒9 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB9 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB10 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB10 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
pjj1985412 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse