在测试和生产环境之间看到 2 个非常不同的 UPDATE 执行计划

Eri*_*gum 4 performance sql-server update query-performance

对于作为存储过程一部分的 UPDATE 语句,我在测试/生产之间看到 2 个非常不同的查询计划。显然表大小不同(大约有 1000 万行差异)。基本上区别在于 Prod 我看到一组昂贵的排序,然后是索引更新(nc 索引)

而在测试中,我根本没有看到这些运算符集!只有聚集索引更新。我已经验证了 NC 索引存在等等。我不知道发生了什么?!我已经验证了索引、sp,我试过重新编译,参数的不同值等等。肯定有我遗漏的东西,我什至检查了约束,一切都匹配。

有什么想法吗?我以前从未见过这个。SQL 是否只是抓住了一个糟糕的执行计划!?

UPDATE 的结构是这样的:UPDATE [tablename] SET [column]=123 FROM ...

以下 Prod 计划中的额外运算符(减去聚集索引更新): 在此处输入图片说明

Eri*_*ing 10

将鼠标悬停在聚集索引更新上,您将看到所涉及的其他索引的列表。

坚果

如果您改用 Plan Explorer,您将看到记录的非聚集索引的数量。

坚果

请参阅Bart Duncan 的Wide vs. Narrow Plans