日期:2014-05-16  浏览次数:20811 次

为何like执行速度比=要快得多!?
我写得一个视图v_yy_dksjtjb,其中有2层的嵌套,大量的数据处理,非常复杂。记录总数31万多条。

语句1:
select * from v_yy_dksjtjb t where dkdm like 'LP3A01'
执行耗时0.9秒
语句2:
select * from v_yy_dksjtjb t where dkdm='LP3A01'
执行耗时82秒!
语句3:
select * from v_yy_dksjtjb t where dkdm in ('LP3A01')
执行耗时73秒!

这是为什么?如何能进行优化?
------解决方案--------------------
看执行计划。
------解决方案--------------------
执行计划。
------解决方案--------------------
对,执行计划贴出来。
sqlplus登上去,
set autotrace on
之后执行这三条语句。
------解决方案--------------------
like采用的地嵌套循环(nest loop) 而 = 采用的是合并连接(merge)
nest loop join: 扫描驱动表(如果有排序,按照 排序字段 排序后),取驱动表的逐行记录与被驱动表对比.
          NESTED LOOPS有一个优点是:可以先返回已经
           连接的行,而不必等待所有的连接操作处理完才返回数据,
           这可以实现快速的响应时间。

nest loop比merge快。。