DRT*_*uli 11 sql oracle sql-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')
Run Code Online (Sandbox Code Playgroud)
要么
查询select语句然后使用update或insert语句.
SELECT * FROM table_name where row_id = 'some_id'
Run Code Online (Sandbox Code Playgroud)
如果rowCount == 0
INSERT INTO table_name (row_id,col_name) VALUES ('some_id','some_val')
Run Code Online (Sandbox Code Playgroud)
其他
UPDATE table_name SET col_name='some_val' WHERE row_id='some_id'
Run Code Online (Sandbox Code Playgroud)
Jef*_*emp 24
的经验法则是,如果你可以在一个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)
Run Code Online (Sandbox Code Playgroud)