数据库之聚集索引和非聚集索引的区别

聚集索引和非聚集索引的区别

1、聚集索引

  • 文件中的每个搜索码值都对应一个索引值。一个表只能创建一个聚集索引,叶子节点就是对应的数据全部列的值
  • 数据行的物理顺序与列值的顺序相同,如果我们查询id比较靠后的数据,那么这行数据的地址在磁盘中的物理地址也会比较靠后。而且由于物理排列方式与聚集索引的顺序相同,所以也就只能建立一个聚集索引了。
  • B+Tree结构

2、非聚集索引

  • 文件只为索引码的某些值建立索引项,并存储该行主键值

  • 该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,故一个表中可以拥有多个非聚集索引。

  • 非聚集索引在索引没有覆盖到对应的列的时候需要进行二次查询

  • B+Tree结构

在这里插入图片描述
上图可以看出,聚集索引(主键索引)查询id为7的索引数据只需要一次查询,而非聚集索引(辅助索引)查询到自己所含有的值,还要根据存储的主键值去查询剩余的数据,这便是二次查询,实际使用中,我们应该尽量避免二次查询

总结

  • 聚集索引的查询效率要比非聚集索引的效率要高,但是如果需要频繁去改变聚集索引的值,写入性能并不高,因为需要移动对应数据的物理位置。
  • 非聚集索引在查询的时候可以的话就避免二次查询,这样性能会大幅提升。这点我们可以采用组合索引进行查询
  • 不是所有的表都适合建立索引,只有数据量大表才适合建立索引,且建立在选择性高的列或者我们频繁使用的列上面性能会更好。
原创文章 50 获赞 101 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42173451/article/details/105652047