我有一張表,TBL1
,只有GUID。哪個更快/更好:哪裏更新或合併?
我有另一個表,TBL2
,其中主鍵是GUID,它也有一些其他列。我想根據GUID是否在TBL1
中更新TBL2
表中的某一列。
以下哪個查詢更快和/或更可靠?
MERGE INTO [db].[dbo].[TBL1] AS target
USING [db].[dbo].[TBL2] as source
ON target.GUID = source.GUID
WHEN MATCHED THEN
UPDATE SET
StatusColumn = 0;
或
UPDATE [db].[dbo].[TBL1]
SET StatusColumn=0
WHERE GUID IN (SELECT GUID FROM [db].[dbo].[TBL2])
也許別的東西嗎?
當您嘗試時發生了什麼?執行計劃對兩種表述都說了什麼? – 2012-03-29 20:00:56
*一般*不推薦使用'WHERE IN'。 「WHERE EXISTS」更普遍被接受。但不管怎麼說,MERGE的設計是爲了*更多*而非*更快*。但爲什麼有人會說,爲什麼不自己測試所有的選項? * [另外,請注意,通常不建議使用GUID作爲主鍵。如果你的PK是你的聚簇鍵,你將會像無體的業務一樣分割表 - 因爲GUID不是按順序生成的,所以新條目需要插入表中的隨機位置,而不是在末尾插入。] * – MatBailie 2012-03-29 20:06:49
@Dems - 好建議。我想補充一點,如果你使用Guids作爲主鍵,只需創建它們(或者改變它們)爲非集羣。我們注意到,通過進行這種改變,我們的環境顯着提高了性能 – RQDQ 2012-03-29 20:52:27