2012-09-05 36 views
10

Điều gì sẽ nhanh hơn?Oracle Merge vs Chọn rồi Chèn hoặc Cập nhật

Merge tuyên bố

MERGE INTO table_name 
    USING dual 
    ON (row_id = 'some_id') 
    WHEN MATCHED THEN 
    UPDATE SET col_name = 'some_val' 
    WHEN NOT MATCHED THEN 
    INSERT (row_id, col_name) 
    VALUES ('some_id', 'some_val') 

hoặc

truy vấn một tuyên bố chọn sau đó sử dụng một bản cập nhật hoặc chèn tuyên bố.

SELECT * FROM table_name where row_id = 'some_id' 

nếu rowCount == 0

INSERT INTO table_name (row_id,col_name) VALUES ('some_id','some_val') 

khác

UPDATE table_name SET col_name='some_val' WHERE row_id='some_id' 

Trả lời

22

Nguyên tắc của ngón tay cái là, nếu bạn có thể làm điều đó trong một SQL, nó thường sẽ thực hiện tốt hơn hơn là thực hiện nó trong nhiều câu lệnh SQL.

Tôi muốn sử dụng MERGE nếu thực hiện công việc.

Ngoài ra - một gợi ý: bạn có thể tránh lặp lại dữ liệu trong báo cáo của bạn, ví dụ .:

MERGE INTO table 
USING (SELECT 'some_id' AS newid, 
       'some_val' AS newval 
     FROM dual) 
ON (rowid = newid) 
WHEN MATCHED THEN 
UPDATE SET colname = newval 
WHEN NOT MATCHED THEN 
INSERT (rowid, colname) 
VALUES (newid, newval) 
+0

Tôi đã suy nghĩ giống nhau nhưng làm thế nào về quá trình trên máy chủ oracle? – DRTauli

+1

Còn quy trình thì sao? –

+0

rowid chỉ là các hàng pk. – DRTauli

-3

Chăm sóc hợp nhất. Nó có thể tiêu thụ rất nhiều khu vực của bạn TEMP sử dụng HASH JOIN. Kiểm tra anh ta bằng cách sử dụng gợi ý FIRST_ROWS hoặc sử dụng UPDATE xem tham gia cộng với INSERT với NOT EXISTS.

Các vấn đề liên quan