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

相关推荐
ly768936 分钟前
Web 性能优化实战:从 Core Web Vitals 到工程化性能治理
前端·性能优化
瀚高PG实验室43 分钟前
PostgreSQL pg_basebackup 和 pg_rewind 可覆盖源端超级用户选择的无关文件HGVE-2026-E010
数据库·postgresql·瀚高数据库
宠友信息2 小时前
社区类源码开发实践中的仿小红书系统技术要点分析
java·spring boot·redis·mysql·uni-app·vue·内容运营
OceanBase数据库官方博客3 小时前
亮相“十五五”公积金高质量发展大会“AI 数据库”助力智慧公积金升级
数据库·人工智能
Lyra_Infra4 小时前
MySQL Docker 误删恢复:binlog PITR
mysql·docker·命令行
李昊哲小课4 小时前
SpringBoot4 云端咖啡站 阶段四:安全、文件与性能
spring boot·安全·性能优化·文件·性能
龙虾PRO4 小时前
高并发场景数据库调优实操:目标定位、监控方法与优化维度全解析
数据库·oracle
达梦产品与服务4 小时前
SQLark 实战 | 高频 SQL 脚本的导入、管理与复用
数据库·sql·数据库开发·数据库运维·脚本管理·sqlark百灵连接·sql脚本
南城以南溫暖如初1474 小时前
从零搭建24小时自助健身系统:技术选型与核心模块实战
java·spring boot·redis·mysql·vue·mybatis