11

何が速いですか?

Merge ステートメント

    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'

行数 == 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'
4

2 に答える 2

23

経験則として、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)
于 2012-09-05T03:36:52.833 に答える
-2

マージに注意してください。を使用すると、多くの領域を消費する可能性がありTEMPますHASH JOIN。ヒントを使用して彼をテストするFIRST_ROWSか、UPDATEview join plus INSERTwith を使用しNOT EXISTSます。

于 2016-05-03T11:32:43.473 に答える