Heim >Datenbank >MySQL-Tutorial >Oracle hint 实践一列 leanding 驱动表和hash多块读取

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 17:10:031377Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn