我有一个处理大量数据的存储过程(在这个例子中大约有 5m 行)。性能差异很大。我已经让这个过程在短短 15 分钟内运行,并且看到它运行了长达 4 小时。
为了维护,并且为了验证逻辑和处理是否正确,我们将 SP 分成几个部分:
TRUNCATE
并填充一个工作表(索引),我们稍后可以使用自动化测试工具进行验证。将几个表连接在一起(包括其中一些工作表)以生成另一个工作表
重复 1 和/或 2,直到产生最终输出。
我担心的是这是一个单一的 SP,因此在第一次运行时会得到一个执行计划(甚至WITH RECOMPILE
)。但当时,工作表(Work 模式中的永久表)是空的。
我担心,无论索引方案如何,执行计划都会很差。
我正在考虑拆分 SP 并从其中调用单独的 SP,以便在构建工作表中的数据后,它们可以利用重新评估的执行计划。我还看到了使用 EXEC 运行动态 SQL 的参考,显然也可能得到一个RECOMPILE
。
我仍在尝试获得SHOWPLAN
许可,所以我很盲目。