您的位置:首页 > 数据库

MyISAM与InnoDB索引结构

2016-11-19 19:32 344 查看

动机

在学习B树与B+树的时候,在想为什么这2个树会被数据库存储使用了,有什么好处吗?所以就此探索了一下。

局部性原理与磁盘预读

磁盘读取速度慢,为了提高读取速度,就要减少IO,那么磁盘往往不是一次读取一个字节,而是一次读取一页(通常是4K),这是因为计算机中局部性原理:当一个数据被使用到,其附近的数据也通常会马上被使用。预读可以提高I/O效率,那么如果B树的一个节点恰好是一个页的长度的话,每次读取就会读取一个节点,这样不就很好了!其读取的每个节点可以一次IO读取出,树的高度最小,次数最少。(红黑树H会很高)时间复杂度=树的高度=logM(N)以M为底N的对数。在实际运用的时候,M会很大,使得H不超过3。

这就是为什么选择B树的原因。

MyISAM

MyISAM可以没有主键,那么这是怎么实现的呢?

所有的索引都会建立一个B+树,叶子节点存储索引的值,然后每个索引对应一个地址,这个地址的内容就是一项数据。这样的索引叫做“非聚集“



InnoDB

这个索引称为“聚集索引“,因为在B+树叶子节点中,就存的是真正的数据。



而对于辅助索引,InnoD会在叶子节点的存储主索引的地址



联系我

QQ 1906362072


Mail hellowangqihang@gmail.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 索引