Skip to content

Commit a1147b4

Browse files
committed
MySQL 索引
1 parent 4c99493 commit a1147b4

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

MySQL/MySQL必知必会.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,11 @@ InnoDB 物理文件结构为:
114114
- 日期类型:Date、DateTIme、TImeStamp、TIme、Year;
115115
- 其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、LineString、MultiLineString、Polygon、GeometryCollection 等。
116116

117-
![image-20210523094634319](images/image-20210523094634319.png)
117+
![image-20210523094634319](./images/image-20210523094634319.png)
118118

119-
![image-20210523094701376](images/image-20210523094701376.png)
119+
![image-20210523094701376](./images/image-20210523094701376.png)
120120

121-
![image-20210523094717114](images/image-20210523094717114.png)
121+
![image-20210523094717114](./images/image-20210523094717114.png)
122122

123123
> CHAR 和 VARCHAR 的区别?
124124
>
@@ -161,7 +161,7 @@ MySQL 官方对索引的定义为:索引(index)是帮助 MySQL 搞笑获
161161

162162
可以简单的理解为"排好序的快速查找数据结构",数据本身之外, **数据库还维护着一个满足特定查找算法的数据结构,**这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法。这种数据结构就是索引。下图是一种可能的索引方式示例:
163163

164-
![image-20210523100019331](images/image-20210523100019331.png)
164+
![image-20210523100019331](./images/image-20210523100019331.png)
165165

166166
左边的数据表一共有两列七条记录,最左边的是数据记录的物理地址。为了加快 Col2 的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值,和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在一定的复杂度上获取到对应的数据,从而快速检索出符合条件的记录。
167167

@@ -254,7 +254,7 @@ B-Tree 结构的数据可以让系统高效的找到数据所在的磁盘块。
254254

255255
B-Tree 中的每个节点根据实际情况可以包含大量的关键字信息和分支,如下图所示为一个 3 阶的 B-Tree:
256256

257-
![image-20210523223125711](images/image-20210523223125711.png)
257+
![image-20210523223125711](./images/image-20210523223125711.png)
258258

259259
每个节点占用一个盘块的磁盘空间,一个节点上有两个升序排序的关键字和三个指向子树根节点的指针,指针存储的是子节点所在磁盘块的地址。两个关键词划分成的三个范围域对应三个指针指向的子树的数据的范围域。以根节点为例,关键字为 17 和 35,P1 指针指向的子树的数据范围为小于 17,P2 指针指向的子树的数据范围为 17~35,P3 指针指向的子树的数据范围为大于 35。
260260

@@ -281,7 +281,7 @@ B+Tree 相对于 B-Tree 有几点不同:
281281

282282
将上一节中的 B-Tree 优化,由于 B+Tree 的非叶子节点只存储键值信息,假设每个磁盘块能存储 4 个键值及指针信息,则变成 B+Tree 后其结构如下图所示:
283283

284-
![image-20210523225651511](images/image-20210523225651511.png)
284+
![image-20210523225651511](./images/image-20210523225651511.png)
285285

286286
通常在 B+Tree 上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。因此可以对 B+Tree 进行两种查找运算:一种是对于主键的范围查找和分页查找,另一种是从根节点开始,进行随机查找。
287287

@@ -300,7 +300,7 @@ InnoDB 存储引擎中页的大小为 16KB,一般表的主键类型为 INT(
300300

301301
MyISAM 引擎的索引文件和数据文件是分离的。 **MyISAM 引擎索引结构的叶子节点的数据域,存放的并不是实际的数据记录,而是数据记录的地址。** 索引文件与数据文件分离,这样的索引称为"非聚簇索引"。MyISAM 的主索引与辅助索引区别并不大,只是主键索引不能有重复的关键字。
302302

303-
![image-20210523231529878](images/image-20210523231529878.png)
303+
![image-20210523231529878](./images/image-20210523231529878.png)
304304

305305
在 MyISAM 中,索引(含叶子节点)存放在单独的`.myi`文件中,叶子节点存放的是数据的物理地址偏移量(通过偏移量访问就是随机访问,速度很快)。
306306

0 commit comments

Comments
 (0)