本文主要是介绍聚簇索引的效率明显要低于非聚簇索引,为什么还需要聚簇索引?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
每次使用辅助索引检索都要经过两次B+树查找,看上去聚簇索引的效率明显要低于非聚簇索引,这不是多此一举吗?聚簇索引的优势在哪?
-
由于行数据和聚簇索引的叶子节点存储在一起,同一页中会有多条行数据,访问同一数据页不同行记录时,已经把页加载到了Buffer中(缓冲池),
再次访问时,会在内存中完成访问,不必访问磁盘。这样主键和行数据是一起被载入内存的,找到叶子节点就可以立刻将行数据返回了,
如果按照主键Id来组织数据,获得数据更快。 -
辅助索引的叶子节点,存储主键值,而不是数据的存放地址。好处是当行数据发生变化时,索引树的节点也需要分裂变化;可以避免对辅助索引的维护工作,
只需要维护聚簇索引树就好了。另一个好处是,因为辅助索引存放的是主键值,减少了辅助索引占用的存储空间大小。注:我们知道一次io读写,可以获取到16K大小的资源,我们称之为读取到的数据区域为Page(页/数据页)。而我们的B树,B+树的索引结构,叶子节点上存放好多个
key(索引值)和对应的数据,都会在一次IO操作中被读取到缓存中,所以在访问同一个页中的不同记录时,会在内存里操作,而不用再次进行IO操作了。
除非发生了页的分裂,即要查询的行数据不在上次IO操作的缓存里,才会触发新的IO操作。 -
因为MyISAM的主索引并非聚簇索引,那么他的数据的物理地址必然是凌乱的,拿到这些物理地址,按照合适的算法进行I/O读取,于是开始不停的寻道不停的旋转。
聚簇索引则只需一次I/O。(强烈的对比) -
不过,如果涉及到大数据量的排序、全表扫描、count之类的操作的话,还是MyISAM占优势些,因为索引所占空间小,这些操作是需要在内存中完成的。
这篇关于聚簇索引的效率明显要低于非聚簇索引,为什么还需要聚簇索引?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!