为什么在相同计划中,(相同)1000个唯一索引的估计成本不同?
在下面的查询中,两个执行计划都估计将对唯一索引执行1,000次查找。 搜索是由对同一源表的有序扫描驱动的,因此看起来应该最终以相同的顺序搜索相同的值。 两个嵌套循环都有 <NestedLoops Optimized="false" WithOrderedPrefetch="true"> 有人知道为什么第一个计划的成本为0.172434,而第二个计划的成本为3.01702吗? (问题的原因是,由于明显降低了计划成本,因此向我建议了第一个查询,这是一种优化。实际上,我认为它似乎在做更多的工作,但我只是想解释这个差异。) ) 设定 CREATE TABLE dbo.Target(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); CREATE TABLE dbo.Staging(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); INSERT INTO dbo.Target SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER BY @@SPID), LEFT(NEWID(),32) FROM master..spt_values v1, master..spt_values v2; INSERT INTO dbo.Staging …