烦请高手赐教,下面的语句查询是太慢了,怎么才能变得快一些呢?SELECT msi.inventory_item_id, msi.segment1 AS item_no, bic.operation_seq_num,
  msi1.inventory_item_id AS main_id, msi1.segment1 AS mb_item,
  msi2.segment1 sub_item, bic.component_quantity AS qty,
  brd.component_reference_designator AS LOCATION, msi1.description,
  msi2.description sub_desc
  FROM inv.mtl_system_items msi,
  bom.bom_bill_of_materials bom,
  bom.bom_inventory_components bic,
  inv.mtl_system_items msi1,
  bom_reference_designators brd,
  inv.mtl_system_items msi2,
  (SELECT * FROM bom.bom_substitute_components WHERE NVL (acd_type, 1) <> 3) bsc
  WHERE msi2.inventory_item_id(+) = bsc.substitute_component_id
  AND bic.component_sequence_id = bsc.component_sequence_id(+)
  AND bic.component_sequence_id = brd.component_sequence_id(+)
  AND NVL (brd.acd_type, 1) <> 3
    
  AND bom.common_bill_sequence_id = bic.bill_sequence_id
  AND bic.implementation_date IS NOT NULL
  AND msi1.inventory_item_id = bic.component_item_id
  AND msi1.organization_id = msi.organization_id
  AND msi2.organization_id = msi.organization_id
  AND bom.organization_id = msi.organization_id
  AND bom.assembly_item_id = msi.inventory_item_id
  and msi.organization_id in(24,748,87)
    
  AND msi.segment1 = '606-X0023-040'
    
  AND brd.component_reference_designator = 'U29'
    
  AND NVL(bic.disable_date, sysdate + 1) >=( SELECT NVL (MIN (rev.effectivity_date), sysdate)  
  FROM inv.mtl_item_revisions rev
  WHERE rev.inventory_item_id = bom.assembly_item_id
  AND rev.organization_id = bom.organization_id
  AND rev.revision > '000')
    
  AND bic.effectivity_date <(select nvl (min (rev.effectivity_date), sysdate)
  FROM inv.mtl_item_revisions rev
  WHERE rev.inventory_item_id = bom.assembly_item_id
  AND rev.organization_id = bom.organization_id
  AND rev.revision > '000')

解决方案 »

  1.   

    检查一下各个字段的索引情况。
    用工具查看执行计划,慢慢调吧。看似比较复杂 呢。呵呵。
      

  2.   

    太不好分析了。贴出表结构和对应的执行计划
      

  3.   

    楼主的语句不是一般的复杂。
    各个表的记录数分别是多少条?
    各表包括了哪些索引,索引字段顺序是怎样呢?可以先分析执行计划,看看有没全表扫描的,大表的全表扫描是很慢的