我正在執行大量的從詳細表插入到SQL Server內的彙總表。我目前使用的左外連接,以確定是否從細節表的行中的彙總表已經存在之前將其插入如下面的例子:基於INSERT是否已經存在,執行INSERT的最有效方法是什麼?
INSERT INTO TableA
(columnA
,columnB
,columnC)
SELECT
b.columnA,
b.columnB,
b.columnC
FROM TableB b
LEFT OUTER JOIN TableA a
on a.columnA = b.columnA
WHERE
a.columnA IS NULL
我發現,這種方法需要大量的即使沒有要插入的行,因爲它必須比較所有行才能確定已存在的行。在這種情況下,我通常會考慮給TableB
添加一個標誌來說明插入了哪些行。
但是,TableB
中有一行需要插入TableA
,這需要幾個標誌,我不希望使用存儲空間,因爲TableB
非常大,而且長度也很大。
感謝您的任何建議。
您是否嘗試改用合併語句?我認爲sql-server在使用它的時候會做一些額外的優化。 – mfussenegger
你還可以在這些表上顯示PK和索引嗎? –