如何优化一段sql

billlyh 2012-10-17 02:49:27
zdwip_slip_headers、zdwip_slip_lines表是自定义的,
以下语句很快就有结果,但一连接这两个自定义表就很慢,要一个多小时才出来,哪位帮忙优化一下呢??????
select we.wip_entity_name,wro.wip_entity_id,
msi.segment1 segment1,msi.description description1,
msi2.segment1 segment2,wro.inventory_item_id,msi2.description description2,
wdj.status_type,
wdj.date_completed,
wdj.date_closed,
wdj.class_code,
wro.required_quantity,
wro.quantity_issued,
wro.required_quantity-wro.quantity_issued quantity_OPEN,msi2.primary_uom_code,
wro.supply_subinventory,

WRO.ATTRIBUTE2 BZ,
WRO.OPERATION_SEQ_NUM
from inv.mtl_system_items msi,
inv.mtl_system_items msi2,
--sdcd.zdwip_slip_headers zsh,sdcd.zdwip_slip_lines zsl,
wip.wip_entities we,
wip.wip_discrete_jobs wdj,
wip.wip_requirement_operations wro

where wdj.organization_id = 4
and we.organization_id = 4
and wro.organization_id = 4
and msi.organization_id=4 and msi2.organization_id=4
and we.wip_entity_id = wdj.wip_entity_id
and wro.wip_entity_id = wdj.wip_entity_id

/* and zsh.slip_id=zsl.slip_header_id
and zsl.wip_entity_id(+)=wro.wip_entity_id and zsl.inventory_item_id(+)=wro.inventory_item_id
and zsl.operation_seq_num(+)=wro.operation_seq_num*/

and wdj.primary_item_id=msi.inventory_item_id and wro.inventory_item_id=msi2.inventory_item_id


and wro.required_quantity<>0
and wro.required_quantity <> wro.quantity_issued
and (('&P_NO_KJ'='Y' AND WRO.SUPPLY_SUBINVENTORY not like '%开架%') OR '&P_NO_KJ'='N')
and ('&P_CLASS'='全部' OR ('&P_CLASS'<>'全部' AND CLASS_CODE||''='&P_CLASS'))
and
(
(
'&P_STATUS'='已完成' and wdj.status_type = 4
and wdj.DATE_COMPLETED >= to_date('&P_DATE_F', 'yymmdd')
and wdj.DATE_COMPLETED <= to_date('&P_DATE_T', 'yymmdd')
)
or
(
'&P_STATUS'='已关闭' and wdj.status_type = 12
and nvl(wdj.date_closed,to_date('&P_DATE_F', 'yymmdd')) >= to_date('&P_DATE_F', 'yymmdd')
and nvl(wdj.date_closed,to_date('&P_DATE_F', 'yymmdd')) <= to_date('&P_DATE_T', 'yymmdd')
)
)

...全文
277 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
billlyh 2012-12-14
  • 打赏
  • 举报
回复
引用 7 楼 GG_wg 的回复:
or 换成 union ,前者是执行一条语句,复杂度高,慢;后者,换成两条语句,复杂度简化,快
确实如此,谢谢
billlyh 2012-12-14
  • 打赏
  • 举报
回复
引用 7 楼 GG_wg 的回复:
or 换成 union ,前者是执行一条语句,复杂度高,慢;后者,换成两条语句,复杂度简化,快
确实如此,谢谢
billlyh 2012-12-14
  • 打赏
  • 举报
回复
引用 7 楼 GG_wg 的回复:
or 换成 union ,前者是执行一条语句,复杂度高,慢;后者,换成两条语句,复杂度简化,快
确实如此,谢谢
GG_wg 2012-10-29
  • 打赏
  • 举报
回复
or 换成 union ,前者是执行一条语句,复杂度高,慢;后者,换成两条语句,复杂度简化,快
billlyh 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
把or换成用union,变成两个select 并在一起 这样执行速度马上就会上来
[/Quote]
or换成union确实快了,也上网找了一些原因,但不是很明白,能否解释一下
myling_m428 2012-10-27
  • 打赏
  • 举报
回复
是不是跟 and 和“=”的优先级有关系呀。
那就把条件加上括号。
编程小强 2012-10-25
  • 打赏
  • 举报
回复
把or换成用union,变成两个select 并在一起 这样执行速度马上就会上来
billlyh 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
如果速度下降太多,就使用过程,分别用多个SQL来完成,不一定非用一个SQL。
[/Quote]
能否给个例子看看你的写法
billlyh 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
如果速度下降太多,就使用过程,分别用多个SQL来完成,不一定非用一个SQL。
[/Quote]
这也是一个办法
onejune4450 2012-10-17
  • 打赏
  • 举报
回复
如果速度下降太多,就使用过程,分别用多个SQL来完成,不一定非用一个SQL。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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