12
返回列表 发新帖
楼主: MythColor

迷惑!怎样让Oracle的执行计划更聪明?

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2008-4-17 18:32 | 只看该作者
然后分析表(我是把表建在test用户下的)

exec dbms_stats.gather_table_stats(ownname => 'test',tabname => 'BIG');

exec dbms_stats.gather_table_stats(ownname => 'test',tabname => 'SMALL');

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2008-4-17 18:45 | 只看该作者
好,现在可以运行我提出的那种SQL语句了:

select b.big_id, b.small_id, b.bvalue, b.txn_date, s.stype
from BIG b, small s
where s.small_id = b.small_id
and b.TXN_DATE > to_date('20070101','yyyymmdd')
and b.TXN_DATE < to_date('20070121','yyyymmdd')
and s.stype = 'TY2'




Plan                                              Cardinality Bytes Cost
SELECT STATEMENT  ALL_ROWS                         1,138 36,416 566
6 HASH JOIN                                       6 1,138 6 36,416 6 566
4 VIEW VIEW TEST.index$_join$_002    4 133 4 1,197 4 3
3 HASH JOIN    3  3  3
1 INDEX RANGE SCAN INDEX TEST.NDX_SMALL_TYPE  1 133 1 1,197 1 1
2 INDEX FAST FULL SCAN INDEX (UNIQUE) TEST.PK_SMALL  2 133 2 1,197 2 1
5 TABLE ACCESS FULL TABLE TEST.BIG    5 3,423 5 78,729 5 563


执行计划跟我预期的有点不同,但确实没有从大表的 TXN_DATE  这个字段入手...
但在这个试验的例子里,可能是因为数据量不够大,表不够复杂,所以先从BIG表查还是先从SMALL表查,区别不大,前者速度稍微快一点点。但在我的实际项目环境中,查询速度差别可以达到2个数量级...

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
13#
发表于 2008-4-19 00:28 | 只看该作者
我只想说一点
永远不要去证明自己比优化器更聪明。。
你没有为系统收集更完整得信息。。
比如说上满你没有为索引建立统计信息。。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表