> 데이터 베이스 > MySQL 튜토리얼 > Oracle hint 实践一列 leanding 驱动表和hash多块读取

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-07 17:10:03
원래의
1383명이 탐색했습니다.

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

由于数据库对表没有做及时的分析, 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());

linux

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿