gpt4 book ai didi

sql - 如果表将 'id' 列作为聚集索引,则将 'id' 列添加为任何其他非聚集索引中的包含列是否有任何好处

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

如果表将“id”(主键)列作为其聚集索引,则将“id”列添加为 Microsoft SQLServer 中任何其他非聚集索引中的包含列是否有任何好处?

例如:- 表“xyz”

<表类=“s-表”><标题>id名称状态日期 <正文>1abc事件2021-06-23
CREATE NONCLUSTERED INDEX [NonClusteredIndex_status_Date]
ON [xyz]
(
[status] ASC,
[date] ASC
)
INCLUDE
( [id],
[name]
)

这个非聚集索引的目标是在大型数据集上进行类似于下面的查询。在实际情况中,还可能存在一些其他查询。

select * from xyz where status='active' and date > '2021-06-20'

最佳答案

您的问题的答案基本上是否定的,没有任何好处。

当您在表上创建非聚集索引时,索引中的每一行都需要能够指向基表中的行。

如果基表是一个,则索引中的每一行都将包含一个指向rid(行标识符)的指针,这是 SQL Server 用于唯一标识的内容每行。

当表定义有聚集索引时,每个非聚集索引将自动包含聚集索引列作为基表中行的

您可以在执行计划中看到这一点,其中使用非聚集索引,并且 SQL Server 必须从基表中检索附加列;如果表是,那么它将是RID查找,如果表有聚集索引,那么它将是键查找

此外,如果聚集索引不唯一,SQL Server会添加自己的uniquifier值以确保唯一性,这也包含在非聚集索引中。

因此,当涉及非聚集索引时,是否指定聚集索引列并不重要 - 可以,而且这样做没有坏处,但它/它们始终包含在内。

关于sql - 如果表将 'id' 列作为聚集索引,则将 'id' 列添加为任何其他非聚集索引中的包含列是否有任何好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68095040/

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