【发布时间】:2010-10-05 20:40:47
【问题描述】:
我有一个处理大量数据的存储过程(在这个例子中大约有 5m 行)。性能差异很大。我在短短 15 分钟内运行了该过程,并且看到它运行了长达 4 小时。
为了维护,为了验证逻辑和处理是否正确,我们将 SP 分成几个部分:
TRUNCATE并填充一个工作表(索引),我们稍后可以使用自动化测试工具进行验证。将几个表(包括其中一些工作表)连接在一起,以生成另一个工作表
重复 1 和/或 2 直到产生最终输出。
我担心这是一个单一的 SP,因此在第一次运行时会得到一个执行计划(甚至是 WITH RECOMPILE)。但那时,工作表(Work 模式中的永久表)是空的。
我担心无论索引方案如何,执行计划都会很差。
我正在考虑拆分 SP 并从其中调用单独的 SP,以便在构建工作表中的数据后,它们可以利用重新评估的执行计划。我还看到了使用 EXEC 运行动态 SQL 的参考,这显然也可能得到 RECOMPILE。
我仍在尝试获得SHOWPLAN 权限,所以我很盲目。
【问题讨论】:
-
5m 行并不大。 Crikey,在 DB2/z 中,我们有比这更大的配置表 :-)
-
5m 刚好够大,执行计划似乎开始变得很重要。我们有一些每日提要超过 2500 万行。
标签: sql sql-server stored-procedures sql-execution-plan