多次插入临时表,然后单次插入到材料表或多次插入直接到材料表

时间:2013-08-08 09:20:51

标签: sql

我的查询结构如下:

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

避免使用临时表并直接在材料表中插入几个是否更有效?即。

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

2 个答案:

答案 0 :(得分:1)

分析执行计划和运行测试总是最好的选择。 Temp tables have their own overhead,所以它真的取决于很多因素。有关背景信息,请查看understanding execution plansINSERT performance between temp tables and a table variable

答案 1 :(得分:1)

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

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

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