oracle hint 实践一列 leanding 驱动表和hash多块读取

由于数据库对表没有做及时的分析,Oss_User_Beh_Sum_Day_201110 这个是大表 这个是按天自动物理创建的表.

由于代码没有把字典表放在第一位置. ORACLE 默认执行计划先访问大表,从右往左是第一个.

然后再访问字典表.在执行计划中字典表采用索引访问,从上往下是最后一个,垫底的.

最后两个表采用NEER LOOP 连接.

所以采用提示符 /*+leading(b)*/  当数据库内存大 可以采用/*+use_hash(b,a)*/ 采用哈希连接 把大部分数据读到内存匹配,采用多块读取,而嵌套循环连接采用单块读取到内存.

下面两条语句可以放在PL/SQL DEVELOPER的WINDOWS 按F8运行 就可以看到执行计划.

一般ORACLE 对表做了分析会智能地采用某个表做驱动表,当不一定会采用HASH连接.

Explain Plan For
Select /*+use_hash(b,a) leading(b)*/
Count(Distinct(Usernumber)),
Sum(a.Totalcount),
a.Provcode,
a.Areacode,
From User_Day_201110 a, Report_Dic_Info b ,
Where a.Operid = b.Operid
And a.Recdate = :Pi_Dutydate
Group By a.Provcode,
a.Areacode,
a.Serviceid,
a.Bindtypeid;
Select * From Table(dbms_xplan.display());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值