由于数据库对表没有做及时的分析, 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());ORA-22160 并非是稀梳数组引起来的Oracle怎样标记坏块及一次数据恢复相关资讯 Oracle基础教程
- Oracle块编程返回结果集详解 (11/10/2013 10:45:58)
- Oracle基础教程之设置系统全局区 (08/22/2013 14:24:00)
- Oracle基础教程知识点总结 (06/18/2013 07:43:32)
| - Oracle基础教程之tkprof程序详解 (10/22/2013 11:49:50)
- Oracle基础教程之sqlplus汉字乱码 (07/18/2013 16:30:00)
- Oracle 管理之 Linux 网络基础 (02/16/2013 18:37:35)
|
本文评论 查看全部评论 (0)