扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Schema的优化和索引 - 高性能的索引策略 - 聚簇索引3
意思就是从非聚簇索引中查找一行,首先,存储引擎会在非聚簇索引找到叶子节点并且之后只用它所存储的主键值找到主键并且找到这个行。这是个双重工作:两个B-TREE的导航。
InnoDB和MyISAM数据布局的比较
聚簇和非聚簇数据的布局并且在它们之间不同的交互都让我们很困惑和吃惊。让我们看看InnoDB和MyISAM在下列表中是怎样布局的。
CREATE TABLE layout_test (
col1 int NOT NULL,
col2 int NOT NULL,
PRIMARY KEY(col1),
KEY(col2)
);
假使这张表的的主键数据为1到1000,并且随即的插入它们,之后再用optimize table来进行优化。也就是说数据最佳的分布在硬盘上,但是行可能是随机的顺序。col2的值在1到100随机的赋值。因此有许多重复。
MyISAM数据布局
MyISAM数据布局还是相对来说简单一些。所以我们先说说它。MyISAM在硬盘中是按照插入的顺序来存储的。图如下
我们发现行的数是从0开始的。因为行是定长的,因此MyISAM会通过从表的开始部分查找所需要的字节数来找到任意的行。
这种布局很容易创建索引。我们用抽象过的图来举例。每个叶子节点都包含了行的数字。来看看表主键的索引图
我们忽略了一些细节的问题,比如多少个B-TREE节点层级,但是这并不会影响我们理解在非聚簇索引引擎的基本数据布局。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者