web-dev-qa-db-ja.com

Oracle Merge vs Select、次に挿入または更新

何が速いですか?

マージステートメント

    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ステートメントを照会してから、updateまたはinsertステートメントを使用します。

    SELECT * FROM table_name where row_id = 'some_id'

rowCount == 0の場合

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

else

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

経験則は、1つのSQLで実行できる場合、通常、複数のSQLステートメントで実行するよりもパフォーマンスが向上します。

それが仕事をするなら、私はMERGEで行きます。

また、別の提案:ステートメント内でデータを繰り返さないようにすることができます(例:

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)
24
Jeffrey Kemp