索引 详解
2023-02-05 21:02:19 9 举报
MYSQL 索引
作者其他创作
大纲/内容
Zark29prod
2[data] 4[data] 6[data]
4
7[id] 8[id]
5[D] 6[D]
Wellon24prod
3[data]
7[D] 8[D]
3 5 7
3
3[id] 4[id]
Lilei28dev
6
Alice30dev
InnoDB B+ Tree (辅助索引/二级索引) id代表主键 查询非覆盖索引情况下需回表
28
5[data]
Hash
8
2
3[D] 4[D]
HanMei30test
1
1[id] 2[id]
B Tree 和 Black-Red Tree 会导致树的高度过高,增大扫描次数B-Tree 如果是InnoDB 的聚簇索引也会导致树的高度过高,因为数据会存储到非叶子结点,导致每页数据行会变小, 默认每页16k的空间, 而且B-Tree 在叶子结点间无方向指针B+ Tree 高度低,高度 3 的树便可存储大概2000万条数据,16* 1024 / 主键int(8字节) + 叶子指针(6字节) = 1170,非叶子结点每页大概可存1170个字段,叶子结点按每行数据存储1k来计算,每页16行数据, 故 1170*1170 * 16 = 21902400 。索引是有序的数据,叶子结点之间也有双向指针,可以方便的判断范围。 Hash 数据结构无法有效解决排序和范围问题。MySQL 内 InnoDB 分为 .frm 表结构文件 和 .ibd 数据&索引文件。 其中ibd 文件内通过聚簇索引的方式存储数据。MySQL 内 MyISAM 分为 .frm 表结构文件 和 .myi 索引文件 和 .myd 数据文件。 所以是非聚集索引,当查询的时候通过索引B+ 树定位到数据地址,再去数据文件中拿数据(类似于InnoDB的回表)。
联合索引做主键
5
InnoDB B+ Tree (聚簇索引/聚集索引/主键索引) D代表整行数据
Alice31prod
233
Alice31dev
9
主键
1[D] 2[D]
144
14
Galla28dev
5[id] 6[id]
Zark29prod1
联合索引字段
B- Tree
76
17
24
Red-BlackTrees
178
LiLei29prod
InnoDB B+ Tree (联合索引[非主键形式]) id代表主键 查询非覆盖索引情况下需回表
7[data] 8[data]
1[data]
HanMei31dev
Galla28prod
B Tree
0 条评论
下一页