nested loop比hash join慢

今天遇见个诡异为题,情况是这样的

我有一个sql,在分页查询 为20条的时候,查询结果为100多ms,但是当分页查询为10条时,执行时间多达4000ms,最后通过执行计划发现,唯一差别是:

10条时,使用的是nested loop;

20条时,用的是hash join;

最后只有强制oracle使用 hash join。具体 nested loop与hash join区别就不多说了

 

/*+ USE_HASH(t,u) */

 解决了此问题 其中t和u分别是视图名或子查询的别名。sql类似如下

 

 

 

select b.*
  from (select a.*, rownum as rownumA
          from (
          
                select /*+ USE_HASH(t,u) */
                 u.name, t.name, t.aNums
                  from (select count(a) as aNums, s.name, s.uid
                           from sur s
                          group by s.name, s.uid) t
                 inner join v_user u
                    on u.id = t.uid

                    ) a
         where rownum <= 10
        ) b
 where rownumA >= 1

 

 

开始把USE_HASH(t,u) 加到最外层select后面,结果不行。必须加到关联查询数据的 select后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值