Sql server 速度的显著提高将SQL Server批处理拆分为两个

Sql server 速度的显著提高将SQL Server批处理拆分为两个,sql-server,Sql Server,我的SQL Server代码在查询执行时间上完全难住了我 我有大约60个连接需要做,我的原始子查询富查询开始不可预测地执行。然后我遵循公认的智慧,把它分成两张临时桌子。要执行此操作的批处理如下所示: 1. SELECT INTO #tempIndexTable 2. SELECT INTO #TableA FROM #tempIndexTable LEFT JOIN {a bunch of sub queries} 3. SELECT INTO #TableB FROM #tempIndexTa

我的SQL Server代码在查询执行时间上完全难住了我

我有大约60个连接需要做,我的原始子查询富查询开始不可预测地执行。然后我遵循公认的智慧,把它分成两张临时桌子。要执行此操作的批处理如下所示:

1. SELECT INTO #tempIndexTable
2. SELECT INTO #TableA FROM #tempIndexTable LEFT JOIN {a bunch of sub queries}
3. SELECT INTO #TableB FROM #tempIndexTable LEFT JOIN {a bunch of different sub queries}
tempIndexTable在用于2中联接的列上具有聚集索引。三,

如果我以批处理方式运行所有三条语句,则运行时间为2.5分钟以上

但是,如果我将上述作为两个批次1+2运行;3运行时间为25秒

编辑:数据本身不是很多数据——在一台任何时候都看不到页面文件使用情况的机器上可能有6000行

有人能解释一下为什么会这样吗?我可以理解为什么两次运行同一个查询会产生不同的结果,而不是这里的情况,或者无论是在过程中还是在批处理中都会产生不同的结果。但这里的情况也不是这样。我真的很想把它作为一个单独的批处理来运行,因为我使用的变量需要在每个单独的批处理中重新定义

或者,另一种提出相同问题的方式是,在批处理结束时发生的是什么,而不是在批处理中的两个SQL语句之间发生的

更糟糕的是: -这些都是在SQLServer2000上实现的。对 -我没有访问ServerManagementStudio的权限,因此查看查询执行计划非常困难


提前感谢您的建议。

当您作为一个批处理运行整个过程时,您的工作集很可能变得足够大,从而导致交换。这可能是对隐式事务边界的影响的结果。

我可能走错了方向,但脚本的总大小是多少?我已经看到查询优化器在数十KB范围内的脚本上超时工作,例如tempIndexTable的初始填充是一整捆insert语句


若问题在分批处理时反复消失,只需在每个select之间添加GO语句即可。这会在保持相同会话的同时将脚本分成多个批次。

谢谢Peter,但我认为不是这样的。编辑问题以添加更多信息-机器从未进入交换,且行数很小-仅约6k。