我有以下查询:
SELECT
COUNT(*)
FROM
FirstTable ft
INNER JOIN SecondTable st ON ft.STID = st.STID
你可以猜到,“STID”是“SecondTable”的主键......并且“FirstTable”将有一个指向第二个表的指针。以下是我拥有的索引:
FirstTable:“STID”列上的非聚集索引
SecondTable:CLUSTERED PRIMARY KEY
“STID”上的索引
上面的查询给了我19.90的子树成本,需要 2 秒。
在为该查询运行数据库优化顾问后,他们建议创建与我在第二个表上的索引完全相同的索引......但非集群。所以我用这些结果进行了尝试。
FirstTable:“STID”列上的非聚集索引
SecondTable:NONCLUSTERED
“STID”上的索引
现在,上面的查询给了我10.97 的子树成本,并且花费了 <1 秒!
这 100% 让我脑洞大开……为什么在这种情况下,非集群索引的执行速度会比集群索引快?