我的查询结构如下:
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
答案 0 :(得分:1)
分析执行计划和运行测试总是最好的选择。 Temp tables have their own overhead,所以它真的取决于很多因素。有关背景信息,请查看understanding execution plans和INSERT performance between temp tables and a table variable。
答案 1 :(得分:1)
答案取决于目标表及其索引的确切结构,以及与插入同时访问MaterialTable
的进程的性质。
TempTable
没有索引; MaterialTable
可能有多个索引。根据插入的数据量和单个插入的数量,从temp复制可能会更快,因为需要对每个索引执行单个多行检查。TempTable
对外人来说是不可见的; MaterialTable
可能会与您的程序同时访问。在这种情况下,锁定和解锁的数量会更小。如果MaterialTable
很小(几千行),这些都不重要。对于较大的表,影响将更加显着,因此我建议在MaterialTable
预期变大时保持临时表方法。