2012-09-05 9 views
10

तेज़ क्या है?ओरेकल मर्ज बनाम फिर चुनें या अपडेट करें

मर्ज बयान

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') 

या

कुछ चुने हुए बयान में जानना चाहते तो एक अद्यतन का उपयोग कर या बयान डालें।

SELECT * FROM table_name where row_id = 'some_id' 

अगर ROWCOUNT == 0

INSERT INTO table_name (row_id,col_name) VALUES ('some_id','some_val') 
बाकी

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

उत्तर

22

अंगूठे की नियम, अगर आप एक एसक्यूएल में कर सकते हैं, यह आम तौर पर बेहतर प्रदर्शन करें इसे कई एसक्यूएल स्टेटमेंट्स में करने से पहले।

यदि यह नौकरी करता है तो मैं मेर्ज के साथ जाऊंगा।

इसके अलावा

- एक और सुझाव: यदि आप अपने बयान में डेटा को दोहरा, उदा .:

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

मैं वही सोच रहा था लेकिन ऑरैकल सर्वर पर प्रक्रिया के बारे में कैसे? – DRTauli

+1

प्रक्रिया के बारे में क्या? –

+0

पंक्तिबद्ध सिर्फ पंक्तियों पीके है। – DRTauli

-3

मर्ज का ख्याल रखें बच सकते हैं। यह HASH JOIN का उपयोग कर आपके क्षेत्र TEMP का बहुत से उपभोग कर सकता है। संकेत FIRST_ROWS का उपयोग करके उसका परीक्षण करें या UPDATE का उपयोग करें INSERTNOT EXISTS के साथ जुड़ें।

संबंधित मुद्दे