2012-09-05 10 views
10

¿Qué es más rápido?Oracle Merge vs Seleccione luego Insertar o Actualizar

la declaración

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

o

consultar una instrucción de selección a continuación, utilizando una actualización o una declaración en Insertar.

SELECT * FROM table_name where row_id = 'some_id' 

si rowCount == 0

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

demás

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

Respuesta

22

La regla de oro es , si puede hacerlo en un SQL, por lo general, va a realizar una mejor que hacerlo en múltiples declaraciones SQL.

I'd with the MERGE si hace el trabajo.

también - otra sugerencia: se puede evitar la repetición de los datos en su estado de cuenta, por ejemplo .:

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

Estaba pensando lo mismo pero ¿qué tal el proceso en el servidor Oracle? – DRTauli

+1

¿qué tal el proceso? –

+0

rowid es solo las filas pk. – DRTauli

-3

Tenga cuidado de la fusión. Puede consumir una gran cantidad de su área TEMP usando HASH JOIN. Pruébelo usando la sugerencia FIRST_ROWS o use UPDATE vea la combinación más INSERT con NOT EXISTS.

Cuestiones relacionadas