一、深度分页查询的优化

1. 问题描述

查询如下 SQL 的效率差异:

  1. 慢查询

    SELECT * FROM tb_sku LIMIT 9000000, 10;
    • 这条 SQL 从第 9,000,000 行开始取 10 行数据,MySQL 需要扫描和丢弃前面 9,000,000 条记录,效率低下。
  2. 优化后的查询

    SELECT * FROM tb_sku t, 
    (SELECT id FROM tb_sku ORDER BY id LIMIT 9000000, 10) a 
    WHERE t.id = a.id;
    • 优化后的 SQL 通过子查询,先快速定位第 9,000,000 条数据的 id,再用 id 进行关联,减少了扫描的数据量。

2. 深入分析

3. 笛卡尔积解释


二、索引优化

1. 什么是联合索引

B+树结构中的区别

最左前缀原则

2. 回表查询

回表查询是指索引查询后,还需要回到主表获取完整数据。


三、Join 优化

1. Join 的执行原理

2. 小表驱动大表

3. SQL 优化原则


四、MySQL 与 Redis 主从复制、读写分离

1. MySQL 的主从复制与读写分离

2. Redis 的主从复制与读写分离


五、事务日志(redo log 和 undo log)

1. redo log(重做日志)

2. undo log(回滚日志)

3. 日志存储位置


六、IO 操作

1. 磁盘 IO(Disk I/O)

2. 网络 IO(Network I/O)


七、DB_TRX_ID、DB_ROLL_PTR、DB_ROW_ID 解释

1. DB_TRX_ID (Database Transaction ID)

2. DB_ROLL_PTR (Database Rollback Pointer)

3. DB_ROW_ID (Database Row ID)