何が速いですか?
マージステートメント
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'
経験則は、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)