MERGE INTO [your table-name] [rename your table here] USING ( [write your query here] )[rename your query-sql and using just like a table] ON ([conditional expression here] AND [...]...) WHEN MATCHED THEN [here you can execute some update sql or some…
下面的两个SQL是等价的,但是一个执行N小时都执行不完,一个花了一分钟. 执行计划显示第一个语句是由外面的即将被更新的表驱动内层,相对于是一个NEST LOOP,cost非常大.第二个语句是内层单独执行完后,与外面的筛选结果做一个HASH JOIN, cost降低了很多. UPDATE GPCOMP1.GPRECL R SET (PROMISED_BY,PROMISED_DATE)=(SELECT W.USER_ID,W.CREATED_ON FROM (SELECT T.*,ROWNUM FR…
2015-05-21 Created By BaoXinjian 一.摘要 以前只考虑 merge into 只是在特定场合下方便才使用的,今天才发现,merge into 竟然会比 update 在更新数据时有这么大的改进. 其实呢,merge into部分的update和update也没啥不同的,不同的地方在于使用merge into后执行计划变了. merge方法是最简洁,效率最高的方式,在大数据量更新时优先使用这种方式. 1. 基本语法 merge into test1 using te…
MERGE INTO RDP_CHARTS_SETTING T1 USING (SELECT '10001' AS PAGE_ID, 'test' AS CHART_OPTION FROM DUAL) T2 ON (T1.PAGE_ID = T2.PAGE_ID) WHEN MATCHED THEN UPDATE SET T1.CHART_OPTION = T2.CHART_OPTION WHEN NOT MATCHED THEN INSERT (T1.PAGE_ID, T1.CHART_OPT…
merge是oracle特有的语句,两表关联操作(增.删.改)就效率非常高 merge into table_name alias1 using (table|view|sub_query) alias2 on (join condition) when matched then update table_name set col1 = col_val1, col2 = col2_val when not matched then insert ( column_list ) values (…