前天有同事在QQ上问了我个问题:
问一下,insert之后update和insert语句中使用left join哪个效率高一些?每个update 差不多4个字段这样。
我脑海里第1刻闪过的答案是:后者效率更高。
依据如下:
1、从生成redo和undo来考虑
2、直观的执行时间考虑
3、减少访问表的次数
事后把这个问题拿到QQ群,网络讨论的意见基本和我一致。
那么下面我们就对此进行简单的测试,验证下理论依据。
测试很简单,创建一个测试表(准备插入的数据是dba_objects的记录),记录2个方案的redo、undo生成量和执行时间。
Last login: Sat Feb 12 10:06:58 2011 from 192.168.112.1
[oracle@gtlions ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期六 2月 12 10:12:22 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
idle> conn store/store
已连接。
store(at)TEST> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Product