对于作为存储过程一部分的 UPDATE 语句,我在测试/产品之间看到 2 个非常不同的查询计划。显然表大小不同(大约 1000 万行差异)。基本上区别在于 Prod 我看到一组昂贵的排序,然后是索引更新(nc 索引)
而在测试中,我根本看不到这些运算符集!只有聚簇索引更新。我已经验证了 NC 索引存在等。我不知道发生了什么?!我已经验证了索引、sp、我已经尝试过 RECOMPILE、参数的不同值等。一定有我遗漏的东西,我什至检查了约束,一切都匹配。
有什么想法吗?我以前从没见过这个。难道 SQL 只是抓住了一个糟糕的执行计划!?
UPDATE 的结构如下:UPDATE [tablename] SET [column]=123 FROM ...
将鼠标悬停在聚集索引更新上,您将看到涉及的其他索引的列表。
如果您改为使用 Plan Explorer,您将看到记录的非聚集索引的数量。
请参阅Bart Duncan 的广义与狭义计划。