MySQL中聚簇索引与非聚簇索引的区别

MySQL中聚簇索引与非聚簇索引的区别?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强> 1,聚集索引

表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,<强> 强,不再有另外单独的数据页。

<强> 一个<强> 强劲,因为真实数据的物理顺序只能有一种。

从物理文件也可以看出InnoDB(聚集索引)的数据文件只有数据结构文件.frm和数据文件.idb其中。idb中存放的是数据和索引信息是存放在一起的。

<强> 2,非聚集索引

表数据存储顺序与索引顺序无关。对于非聚集索引,,其行数量与数据表行数据量一致。

从物理文件中也可以看出MyISAM(非聚集索引)的索引文件.MYI和数据文件。MYD是分开存储的是相对独立的

<强>总结:

聚簇索引和非聚簇索引的区别是:

对于非聚簇索引来说,每次通过索引检索到所需行号后,还需要通过叶子上的磁盘地址去磁盘内取数据(回行)消耗时间。为了优化这部分回行取数据时间,InnoDB引擎采用了聚簇索引。
聚簇索引,即将数据存入索引叶子页面上。对于InnoDB引擎来说,叶子页面不再存该行对应的地址,而是直接存储数据。

这样便避免了回行操作所带来的时间消耗。使得InnoDB在某些查询上比MyISAM还要快!

p。关于查询时间,一般认为MyISAM牺牲了功能换取了性能,查询更快。但事实并不一定如此。多数情况下,MyISAM确实比InnoDB查的快。但是查询时间受多方面因素影响.InnoDB查询变慢得原因是因为支持事务,回滚等等,使得InnoDB的叶子页面实际上还包含有事务id(换句话说就是版本号)以及回滚指针。

动作描述使用聚集索引使用非聚集索引列经常被分组排序使用使用返回某范围内的数据使用不使用一个或极少不同值不使用不使用小数目的不同值使用不使用大数目的不同值不使用使用频繁更新的列不使用使用外键列使用使用主键列使用使用频繁修改索引列不使用使用

关于MySQL中聚簇索引与非聚簇索引的区别问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

MySQL中聚簇索引与非聚簇索引的区别