gpt4 book ai didi

sql-server - 非聚集索引和覆盖索引的区别

转载 作者:行者123 更新时间:2023-12-02 09:33:49 25 4
gpt4 key购买 nike

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

具有三列(即 FirstNameLastNameBirthDate)的非聚集索引与覆盖索引,其中我们有两个索引列(FirstNameLastName)和一个包含列 BirthDate

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

使用干净的非聚集覆盖索引我们得到/失去了什么,而在这两个索引中,我们在索引中拥有所有三个值,而不需要执行额外的任务来从页面文件中获取数据。

索引结构有什么区别吗?

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

最佳答案

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

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

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

SQL Server Central: Stairway to SQL Server Indexes

强烈推荐!

关于sql-server - 非聚集索引和覆盖索引的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29695376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com