1

我有一个结构如下的查询:

CREATE TempTable
...
INSERT INTO TempTable
...
INSERT INTO TempTable
...
INSERT INTO TempTable
...
INSERT INTO MaterialTable
SELECT *
FROM TempTable

避免使用临时表并直接对材料表进行几次插入会更有效吗?IE

INSERT INTO MaterialTable
...
INSERT INTO MaterialTable
...
INSERT INTO MaterialTable
4

2 回答 2

1

分析执行计划和运行测试始终是您最好的选择。临时表有自己的开销,所以它真的取决于很多因素。了解一些背景信息,了解临时表和表变量之间的执行计划和INSERT 性能。

于 2013-08-08T09:25:02.380 回答
1

答案取决于目标表及其索引的确切结构,以及MaterialTable与您的插入同时访问的进程的性质。

  • TempTable没有索引;MaterialTable可能有几个索引。根据插入的数据量和单个插入的数量,从 temp 复制可能会更快,因为需要对每个索引执行单个多行检查。
  • TempTable外人看不到;MaterialTable很可能与您的程序同时访问。在这种情况下,锁定和解锁的数量会更小。
  • 一次插入所有行提供了更好的机会来并行化插入,以实现更快的插入。

如果MaterialTable很小(几千行),这些都不重要。对于较大的表,影响将更加显着,因此我建议在MaterialTable预期变大时保持临时表方法。

于 2013-08-08T09:35:04.677 回答