请教优化问题 高手请进!

paladin2003 2005-12-30 03:09:23
我写了一个查询语句如下:
select FreightOrder.Fromsitecode fromwarehouse,
FreightOrder.Fromsitename FromWHName,
FreightOrder.Tositecode toWarehouse,
FreightOrder.Tositename TOWHName,
packline.ordertype,
item.uniquekey item,
sysdate statisticdate,
facility.ownership,
packline.packqty,
packline.packqty * parameter.parvalue inventoryvalue,
facility.category
from
itaitem item,
BOAPARGRP ParGroup,
BOABOPARAM parameter,
FMPFRGTORD FreightOrder,
WHAMPACLST MainPackList,
WHAMPACLIN packline,
loafacilit facility
where
item.Uniquekey = ParGroup.Parentbo and
parameter.parentgroup = parGroup.Uniquekey and
MainPackList.Foid = FreightOrder.Pid and
packline.parentlist = mainpackList.Uniquekey
其中itaitem, BOAPARGRP,BOABOPARAM都是大表(100万),我希望的执行计划应先连接小表,在连接大表。但执行计划总先连接三个大表。 如何改变执行计划的顺序?

...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cenlmmx 2005-12-30
  • 打赏
  • 举报
回复
如果取的连接表数据量很大,那走Nested Loop效果不好,它适用与小表和大表做连接,而且驱动表是小表.如果你用的cbo,就不存在这个问题,但最好把表和索引都分析一次.
试试用hash join吧,同时注意你的hash area size不能过小.hint: select /*+ use_hash(..) */ .. .from ...
paladin2003 2005-12-30
  • 打赏
  • 举报
回复
hint 的语法是什么 请赐教
paladin2003 2005-12-30
  • 打赏
  • 举报
回复
是的 应为表大 如果加索引,执行计划使用Nested Loop 所以速度很慢,不用索引还快些 使用Merge Loop(full Scan) 所以快些. 我现在想使用方法更改执行计划的顺序,先做小表 在联大表。 各位老大有什么方法?
cctvfanghao 2005-12-30
  • 打赏
  • 举报
回复
up
cenlmmx 2005-12-30
  • 打赏
  • 举报
回复
列出执行计划,看哪个是驱动表,同时尽量避免table full scan.
实在不行,就用hint来指定, 你用的是cbo?
boydgmx 2005-12-30
  • 打赏
  • 举报
回复
把所有涉及本次查询的数据表都分析一下,再看看执行计划

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧