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

vel*_*ije 2 sql-server indexing

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

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

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

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

索引结构有什么区别吗?

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

mar*_*c_s 5

区别在于:包含的列不能用于限制返回的行 - 例如它们不能在WHERE子句中使用(因为它们不是索引导航树的一部分 - 它们只包括 - 正如其名称所暗示的 - 在指数的叶级别).

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

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

SQL Server Central:SQL Server索引的阶梯

强烈推荐!