聚集索引和创建它的表是不是都包含实际数据?
Posted
技术标签:
【中文标题】聚集索引和创建它的表是不是都包含实际数据?【英文标题】:Do Clustered Index and the table on which it is created both contain the actual data?聚集索引和创建它的表是否都包含实际数据? 【发布时间】:2015-04-14 12:08:47 【问题描述】:聚集索引根据键值对表或视图中的数据行进行排序和存储。
https://msdn.microsoft.com/en-IN/library/ms190457.aspx
这意味着如果一个表有聚集索引,那么该表的行将按照与聚集索引完全相同的顺序存储在磁盘上。
其次,聚集索引的叶节点包含创建它的表的数据页。
https://technet.microsoft.com/en-us/library/ms177443%28v=sql.105%29.aspx
那么,我的问题是相同的数据存储在聚集索引和创建它的表中?
如果是,那么需要按照与聚集索引相同的顺序对表进行排序吗?因为聚集索引本身将行级数据存储在它的叶子节点中。
如果不是,那么创建聚集索引背后的实际理论是什么?
【问题讨论】:
【参考方案1】:数据存储在聚集索引的叶级 - 是表数据!
它没有存储在表中和聚集索引中 - 聚集索引的叶级是表格数据。
【讨论】:
您写道,“聚集索引的叶级数据是表数据。”这是什么意思?据我了解,这意味着聚集索引的叶节点指向表的实际行。但是根据聚集索引的定义,“聚集索引不存储指向实际行的指针。实际上,这就是聚集索引和非聚集索引之间的区别。非聚集索引既存储值又存储指向保存该值的实际行。聚集索引不存储指向实际行的指针。聚集索引实际上将行级数据存储在其叶节点中。 @user1780538:不,聚集索引的叶级不存储指向数据的指针 - IT IS THE DATA! 叶级聚集索引的节点包含每个条目的所有列数据。非聚集索引包含索引列、任何可能的包含列、和聚集键(作为数据的“指针”) @user1780538:另请参阅Effective Clustered Indexes 以获得深入的解释(包括一些显示正在发生的事情的图形)【参考方案2】:我在这里得到了答案: https://www.youtube.com/watch?v=lYsVOB_A5o4
https://www.simple-talk.com/sql/performance/14-sql-server-indexing-questions-you-were-too-shy-to-ask/
聚集索引不是表的独立索引,它就是表。 聚集索引不像其他索引类型那样是一个单独的实体,而是一种用于对表进行排序和促进快速数据访问的机制。
因此,我们可以说数据存储在聚集索引中或数据存储在表中。两者都是一样的。
【讨论】:
以上是关于聚集索引和创建它的表是不是都包含实际数据?的主要内容,如果未能解决你的问题,请参考以下文章