Cover

MySQL 高级特性与性能优化笔记

2026-01-14 15 分钟 4500

MySQL 高级特性与性能优化笔记

1. 索引优化实战

在处理千万级数据时,索引的正确使用至关重要。

B+树原理

MySQL 的 InnoDB 存储引擎使用 B+ 树作为索引结构。相比 B 树,B+ 树的叶子节点存储了所有数据,并且通过双向链表连接,非常适合范围查询。

联合索引与最左前缀原则

建立联合索引 (a, b, c) 时,相当于建立了 (a), (a, b), (a, b, c) 三个索引。 查询时必须遵循最左前缀原则,否则索引可能失效。

SQL
-- 索引生效 SELECT * FROM table WHERE a = 1 AND b = 2; -- 索引失效(跳过了 a) SELECT * FROM table WHERE b = 2 AND c = 3;

2. Explain 执行计划分析

使用 EXPLAIN 关键字可以查看 SQL 的执行计划。

  • type: 访问类型,性能从好到坏依次是:system > const > eq_ref > ref > range > index > all
  • key: 实际使用的索引。
  • rows: 预计扫描的行数。
  • Extra: 额外信息,如 Using index (覆盖索引,好), Using filesort (需要文件排序,坏), Using temporary (需要临时表,坏)。

3. 事务隔离级别

MySQL 默认的隔离级别是 REPEATABLE-READ (可重复读)

  • READ UNCOMMITTED: 读未提交,存在脏读。
  • READ COMMITTED: 读已提交,解决脏读,存在不可重复读。
  • REPEATABLE READ: 可重复读,解决不可重复读,通过 MVCC + Next-Key Lock 解决幻读。
  • SERIALIZABLE: 串行化,效率最低。

4. 锁机制

  • 乐观锁: 基于版本号实现,适用于多读少写。
  • 悲观锁: SELECT ... FOR UPDATE
  • 间隙锁 (Gap Lock): 锁定一个范围,但不包括记录本身,用于防止幻读。

5. 总结

性能优化是一个系统工程,除了 SQL 层面,还需要考虑硬件配置、参数调优以及架构层面的缓存策略(如 Redis)和读写分离。

TINYANDNICE

Exploring the digital frontier. Code, design, and thoughts on the future of technology.

© 2026 TinyAndNice. All systems operational.

Command Palette

Search for a command to run...