参考:https ://www.brentozar.com/pastetheplan/?id=Bklc3fGNt
我在#LargerRange 和#SmallerRange 上都有一个聚集索引。这些索引包含 5 个关键列:Name、InOrOut、LocCode、VisitID 和 AccountNumber [按此顺序]。除了位于两个计算标量之间的 Merge Join 运算符之外,大多数估计看起来都不错。这个特定的运算符返回约 53,000% 的估计行。紧随其后的运算符(Concat 和 Table Insert)的估计也很差,但没有那么差。尽管如此,这个插入本身大约需要一两分钟,而且这并没有像在生产中那样处理尽可能多的行。
我对为什么那个特定的运算符大大低估了行数感到有些困惑。第一个错误估计是否会导致以下估计也有偏差?这是否会减慢插入速度(这是一个选择;插入到表中 + with(tablock) 具有聚集索引的性能同样糟糕)?为什么这个估计如此糟糕,我该如何改进它?我怀疑它与聚集索引中键列的顺序有关,但我觉得我只是错过了一些东西,因为我基本上被难住了。非常感谢任何建议。谢谢你。
看起来不像。该操作员的时间统计数据并没有显示它运行了很长时间,
并且大部分时间用于将 2,302,947 行插入临时表。
你期望有那么多行吗?计划中的查询被截断,所以我们只能看到 UNION ALL 中的前两个查询。