非聚集指数与覆盖指数之间的区别

时间:2015-04-17 09:28:44

标签: sql-server indexing

可能是一个奇怪的标题,但我会试着表达我的困境。

非聚集索引与三列(即FirstNameLastNameBirthDate)之间的真正区别是什么,并覆盖索引,其中我们有两个索引列( FirstNameLastName)以及一个包含的专栏BirthDate

使用一种类型相比其他类型的性能提升吗?当我们更新BirthDate列中的值时,两种索引类型中发生了什么?

使用干净的非群集覆盖索引获得/失去的是什么,而在两个索引中,我们在索引中都有三个值,而无需从页面文件中获取额外的任务来获取数据。

索引结构有区别吗?

也许问题太宽泛,但问题很简单。

1 个答案:

答案 0 :(得分:5)

区别在于: included 列不能用于限制返回的行 - 例如它们不能用在WHERE子句中(因为它们不是索引导航树的一部分 - 它们只包括 - 顾名思义 - 在索引的叶级上)。

另一方面:由于它们不是导航结构的一部分,它们也不会使你的索引膨胀 - 它们可能大于最大值。索引条目限制为900字节。因此,如果您有大列(例如VARCHAR(MAX)或大型二进制列),那些永远不会被索引 - 但它们可以包含在叶级别上索引

PS:正如@gotqn在这篇关于这个问题的评论中所指出的 - 这是关于SQL Server中索引的所有内容的一篇非常好的,广泛的,写得很好的系列文章:

SQL Server Central: Stairway to SQL Server Indexes

强烈推荐!