gpt4 book ai didi

sql-server - SQL索引问题: Why does SQL Server prefer this NONCLUSTERED index to a CLUSTERED one?

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

我有以下查询:

SELECT
COUNT(*)
FROM
FirstTable ft
INNER JOIN SecondTable st ON ft.STID = st.STID

您可以猜到,“STID”是“SecondTable”上的主键……而“FirstTable”将有一个指向第二个表的指针。这是我拥有的索引:

FirstTable:“STID”列上的 NONCLUSTERED INDEX

SecondTable:“STID”上的 CLUSTERED PRIMARY KEY INDEX

上面的查询为我提供了 19.90 的子树成本,需要 2 秒

为该查询运行数据库调优顾问后,他们建议制作与我在第二个表上使用的索引完全相同...但非聚集。所以我尝试了这些结果。

FirstTable:“STID”列上的 NONCLUSTERED INDEX

SecondTable:“STID”上的NONCLUSTERED INDEX

现在,上面的查询为我提供了 10.97 的子树成本并且耗时 <1 秒!

这 100% 打碎了我的大脑……在这种情况下,为什么 NONCLUSTERED 索引比 CLUSTERED 索引执行得更快?

最佳答案

因为您的查询没有从表中检索任何实际记录,所以它只是计数。

对于非聚集索引,它仅使用最有可能的 MERGE JOIN 连接两个索引(其大小小于表)。

有了聚簇索引,它必须连接表和非聚簇索引。表更大,遍历它需要更多时间。

如果您发出这样的查询:

SELECT  SUM(first_table_field + second_table_field)
FROM FirstTable ft
INNER JOIN
SecondTable st
ON ft.STID = st.STID

它检索实际值,您将看到聚类的好处。

关于sql-server - SQL索引问题: Why does SQL Server prefer this NONCLUSTERED index to a CLUSTERED one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371005/

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