Skip to content

Commit 3af7abf

Browse files
committed
[docs update]覆盖索引介绍完善
1 parent ae32d74 commit 3af7abf

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ InnoDB 是按照主键索引的顺序来组织表的
213213
214214
**覆盖索引的好处:**
215215

216-
- **避免 InnoDB 表进行索引的二次查询:** InnoDB 是以聚集索引的顺序来存储的,对于 InnoDB 来说,二级索引在叶子节点中所保存的是行的主键信息,如果是用二级索引查询数据的话,在查找到相应的键值后,还要通过主键进行二次查询才能获取我们真实所需要的数据。而在覆盖索引中,二级索引的键值中可以获取所有的数据,避免了对主键的二次查询 ,减少了 IO 操作,提升了查询效率。
216+
- **避免 InnoDB 表进行索引的二次查询,也就是回表操作:** InnoDB 是以聚集索引的顺序来存储的,对于 InnoDB 来说,二级索引在叶子节点中所保存的是行的主键信息,如果是用二级索引查询数据的话,在查找到相应的键值后,还要通过主键进行二次查询才能获取我们真实所需要的数据。而在覆盖索引中,二级索引的键值中可以获取所有的数据,避免了对主键的二次查询(回表),减少了 IO 操作,提升了查询效率。
217217
- **可以把随机 IO 变成顺序 IO 加快查询效率:** 由于覆盖索引是按键值的顺序存储的,对于 IO 密集型的范围查找来说,对比随机从磁盘读取每一行的数据 IO 要少的多,因此利用覆盖索引在访问时也可以把磁盘的随机读取的 IO 转变成索引查找的顺序 IO。
218218

219219
---

docs/database/mysql/mysql-questions-01.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,10 @@ mysql> EXPLAIN SELECT `score`,`name` FROM `cus_order` ORDER BY `score` DESC;
811811

812812
读写分离和分库分表相关的问题比较多,于是,我单独写了一篇文章来介绍:[读写分离和分库分表详解](../../high-performance/read-and-write-separation-and-library-subtable.md)
813813

814+
### 深度分页如何优化?
815+
816+
[深度分页介绍及优化建议](../../high-performance/deep-pagination-optimization.md)
817+
814818
## MySQL 学习资料推荐
815819

816820
[**书籍推荐**](../../books/database.md#mysql)

docs/high-performance/deep-pagination-optimization.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,17 @@ LIMIT 10;
6868

6969
### 覆盖索引
7070

71-
覆盖索引是指查询的结果可以直接从索引中获取,不需要回表查询。这样可以减少随机 IO 的次数,提高查询速度。
71+
索引中已经包含了所有需要获取的字段的查询方式称为覆盖索引。
72+
73+
**覆盖索引的好处:**
74+
75+
- **避免 InnoDB 表进行索引的二次查询,也就是回表操作:** InnoDB 是以聚集索引的顺序来存储的,对于 InnoDB 来说,二级索引在叶子节点中所保存的是行的主键信息,如果是用二级索引查询数据的话,在查找到相应的键值后,还要通过主键进行二次查询才能获取我们真实所需要的数据。而在覆盖索引中,二级索引的键值中可以获取所有的数据,避免了对主键的二次查询(回表),减少了 IO 操作,提升了查询效率。
76+
- **可以把随机 IO 变成顺序 IO 加快查询效率:** 由于覆盖索引是按键值的顺序存储的,对于 IO 密集型的范围查找来说,对比随机从磁盘读取每一行的数据 IO 要少的多,因此利用覆盖索引在访问时也可以把磁盘的随机读取的 IO 转变成索引查找的顺序 IO。
7277

7378
```sql
7479
# 如果只需要查询 id, code, type 这三列,可建立 code 和 type 的覆盖索引
75-
SELECT id, code, type, FROM t_order
76-
ORDER BY text
80+
SELECT id, code, type FROM t_order
81+
ORDER BY code
7782
LIMIT 1000000, 10;
7883
```
7984

0 commit comments

Comments
 (0)