merge語句的好處是把兩次連接查詢合併到了一起,sql變得簡單,減少了對錶或索引的掃描(是這樣麼?)
壞處,不能最小日誌記錄
要merge的目標表不允許一條數據被更新多次,也就是 1,原表不能包含條件重複的數據,2,只能有一個update
MATCHED的條件下可以進行更新或者刪除操作
Not Matched的條件下可以插入操作
可以把CTE和Merge一起使用,CTE來排重
;WITH tmp AS (
SELECT *, ROW_NUMBER() OVER(PARTITION BY [Name] ORDER BY Id) AS rowNum
FROM Table1 )
MERGE Table2 AS TGT
USING (SELECT * FROM tmp WHERE rowNum = 1) AS SRC
ON TGT.[Name] = SRC.[Name]
WHEN MATCHED AND TGT.Date < SRC.Date
THEN UPDATE SET
TGT.Value = SRC.Value
WHEN NOT MATCHED THEN INSERT ([Name], Value)
VALUES(SRC.[Name], SRC.Value);
merge語句在msdn有詳細解釋:http://technet.microsoft.com/en-us/library/bb510625.aspx
Merge語句索引的優化,和表連接索引的優化一樣
1,創建源表Join列的唯一和覆蓋索引
2,創建目標表的唯一聚集索引
詳細信息:http://technet.microsoft.com/en-us/library/cc879317.aspx