
书: https://pan.baidu.com/s/1o53U8DJYBlzPKes4X47C8Q?pwd=ymj8
笔记如下:
- “MySQL的存储引擎架构将核心服务层(如SQL解析)与底层存储(如InnoDB、MyISAM)解耦。”
- “InnoDB的聚簇索引(Clustered Index)将数据行直接存储在B+树叶子节点,主键查询极快。”
- “事务的ACID特性通过InnoDB的undo log(原子性)、redo log(持久性)和锁机制(隔离性)实现。”
- “
EXPLAIN输出中的type列揭示查询访问类型:ALL(全表扫描)最差,const(主键)最优。” - “复合索引遵循最左前缀原则,索引
(a,b,c)无法优化WHERE b=1的查询。” - “
JOIN操作应确保关联字段有索引,避免笛卡尔积(Cartesian Product)导致性能灾难。” - “慢查询日志(slow_query_log)定位性能瓶颈,
long_query_time定义阈值(默认10秒)。” - “分页查询优化:
LIMIT 10000,20改为WHERE id > 10000 LIMIT 20,避免偏移量过大。” - “
VARCHAR变长字符串节省空间,但CHAR定长更适合频繁更新的短字段(如邮编)。” - “批量插入用
INSERT INTO ... VALUES (...), (...), ...替代多次单条插入,提升10倍性能。” - “
utf8mb4字符集支持完整Unicode(如emoji),替代有缺陷的utf8(仅3字节存储)。” - “主从复制(Replication)通过binlog实现,配置
server_id和log_bin开启。” - “
mysqldump --single-transaction备份InnoDB表时不会锁表,利用事务一致性快照。” - “死锁(Deadlock)可通过
SHOW ENGINE INNODB STATUS分析,应用端应实现重试机制。” - “
ORDER BY与GROUP BY的列不一致时,可能触发临时表(Using temporary)和文件排序(Using filesort)。” - “分区表(Partitioning)按范围/列表/哈希拆分大表,但需注意分区键选择和查询条件匹配。”
- “连接池(如C3P0)减少连接创建开销,
wait_timeout控制空闲连接自动断开时间。” - “
sql_mode严格模式(如STRICT_TRANS_TABLES)阻止无效数据插入,避免静默截断。” - “内存调优:
innodb_buffer_pool_size设为物理内存70%-80%,缓存表数据和索引。” - “监控关键指标:QPS(Queries Per Second)、线程池状态(
SHOW STATUS LIKE 'Threads%')、锁等待时间。”