时间:2021-07-01 10:21:17 帮助过:13人阅读
图2-0 表数据
每个InnoDB表都有一个称为聚集索引的特殊索引,该索引是按照表的主键构造的一棵B+树。
根据示例数据构建如图2-1所示聚集索引:
? 图2-1 B+树聚集索引
这里只进行了两次IO,实际上,每个磁盘块大小为4K,3层的B+树可以表示上百万的数据,也就是每次查找只需要3次IO,所以索引对性能的提高将是巨大的。
?
每张InnoDB表有且只有一个聚集索引,那它是怎么选择索引的呢?
PRIMARY KEY
来作为聚集索引。PRIMARY KEY
,将会用第一个UNIQUE
且NOT NULL
的列来作为聚集索引。UNIQUE
索引,会内部根据行ID值生成一个隐藏的聚簇索引GEN_CLUST_INDEX
。所以在建表的时候,如果没有逻辑唯一且非空列时,可以添加一个auto_increment的列,方便建立一个聚集索引。
非聚集索引又叫辅助索引,叶子节点并不包含行记录数据,而是存储了聚集索引键。
根据示例数据(idx_name
索引)构建如图2-2所示辅助索引:
? 图2-2 B+树非聚集索引
NAME=Jake
的数据第一阶段:通过辅助索引查到主键索引的主键
第二阶段:通过主键索引找到完整的行记录
查找结束。
未完待续…
原文链接:MySQL索引(二)B+树在磁盘中的存储 - 掘金 https://juejin.im/post/5cef2c43e51d45572c05ffe3
MySQL索引(二)B+树在磁盘中的存储
标签:维护 技术 target second 节点 文件中 地址 lin 指针