我有以下查询。下面的查询具有两次工会。因此,查询正在等待相同的资源,并且等待时间过长。下面是sql trace的输出。
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 1 0.00 0.00
Disk file operations I/O 1047 0.00 0.15
db file sequential read 167048 0.64 1584.33
db file parallel read 216 0.05 1.37
read by other session 520944 0.71 5113.10
latch: cache buffers chains 31768 0.00 1.32
db file scattered read 50 0.01 0.14
wait list latch free 1 0.00 0.00
您可以看到read by other session
参数。反正有什么可以做下面的查询,以便可以减少这个时间?
SELECT
mmt . transaction_date Txn_date ,
GCC.SEGMENT1||'
'||GCC.SEGMENT2||'
'||GCC.SEGMENT3||'
'||GCC.SEGMENT4||'
'||GCC.SEGMENT5||'
'||GCC.SEGMENT6 C_acct_flex1 ,
MSI.SEGMENT1 C_item_flex1 ,
msi . description Description ,
mtt.transaction_type_name Type ,
mmt . transaction_source_type_id Type_id ,
mmt . organization_id Org_id ,
DECODE ( mmt . transaction_source_type_id ,
1 , to_char ( mmt . transaction_source_id ) ,
2 , MKTS.SEGMENT1||''||MKTS.SEGMENT2||''||MKTS.SEGMENT3 ,
3 , GL.SEGMENT1||''||GL.SEGMENT2||''||GL.SEGMENT3||''||GL.SEGMENT4||''||GL.SEGMENT5||''||GL.SEGMENT6 ,
5 , to_char ( mmt . transaction_source_id ) ,
6 , MDSP.SEGMENT1 ,
7 , to_char ( mmt . transaction_source_id ) ,
8 , MKTS.SEGMENT1||''||MKTS.SEGMENT2||''||MKTS.SEGMENT3 ,
9 , to_char ( mmt . transaction_source_id ) ,
10 , to_char ( mmt . transaction_source_id ) ,
11 , to_char ( mmt . transaction_source_id ) ,
12 , MKTS.SEGMENT1||''||MKTS.SEGMENT2||''||MKTS.SEGMENT3 , mmt . transaction_source_name )
Source ,
decode ( cal . accounted_dr ,
NULL , - 1 * ABS ( mmt . primary_quantity ) , ABS ( mmt . primary_quantity ) ) Quantity ,
msi . primary_uom_code Primary_uom ,
round ( cal . rate_or_amount * : P_EXCHANGE_RATE , : cp_ext_precision ) Cost ,
nvl ( nvl ( cal . accounted_dr , - 1 * cal . accounted_cr ) , 0 ) * : P_EXCHANGE_RATE Value ,
cal . ae_line_id
FROM
cst_ae_headers cah ,
mtl_material_transactions mmt ,
mtl_item_categories mic ,
mtl_system_items msi ,
MTL_SALES_ORDERS mkts ,
MTL_GENERIC_DISPOSITIONS mdsp ,
gl_code_combinations gl ,
mtl_transaction_types mtt ,
cst_ae_lines cal ,
gl_code_combinations gcc
WHERE
cah . ae_header_id = cal . ae_header_id AND
cah . accounting_event_id = mmt . transaction_id AND
cah . acct_event_source_table = 'MMT' AND
cal . code_combination_id = gcc . code_combination_id AND
mmt . inventory_item_id = msi . inventory_item_id AND
mmt . organization_id = msi . organization_id AND
mmt . organization_id = nvl ( mmt . owning_organization_id , mmt . organization_id ) AND
nvl ( mmt . owning_tp_type , 2 ) = 2 AND
cah . cost_group_id = : P_cost_group_id AND
cah . cost_type_id = : P_cost_type_id AND
cah . period_id = : P_period_id AND
GCC.SEGMENT1 = '0731' AND
GCC.SEGMENT2 BETWEEN '75000' AND '95999' AND
GCC.SEGMENT3 BETWEEN '00000' AND '99999' AND
GCC.SEGMENT4 BETWEEN '00000' AND '99999' AND
GCC.SEGMENT5 = '0000' AND
GCC.SEGMENT6 = '00000' AND 1 = 1 AND 1 = 1 AND
mmt.transaction_type_id = mtt.transaction_type_id AND
mmt.inventory_item_id = mic.inventory_item_id AND
mmt.organization_id = mic.organization_id AND
mic.category_set_id = 1 AND
( mmt . transaction_source_type_id = : P_source_type_id OR : P_source_type_id IS NULL ) AND
( mmt . transaction_type_id = : P_txn_type_id OR : P_txn_type_id IS NULL ) AND
mmt . transaction_source_id = mkts . sales_order_id (+) AND
mmt . transaction_source_id = mdsp . disposition_id (+) AND
mmt . transaction_source_id = gl . code_combination_id (+)
UNION ALL
SELECT
rt . transaction_date Txn_date ,
GCC.SEGMENT1||'
'||GCC.SEGMENT2||'
'||GCC.SEGMENT3||'
'||GCC.SEGMENT4||'
'||GCC.SEGMENT5||'
'||GCC.SEGMENT6 C_acct_flex1 ,
MSI.SEGMENT1 C_item_flex1 ,
msi . description Description ,
rt.transaction_type Type ,
0 Type_id ,
0 Org_id ,
null Source ,
decode ( rt . po_distribution_id ,
NULL , decode ( cal . accounted_dr , NULL , - 1 * ABS ( rt . primary_quantity ) ,
ABS ( rt . primary_quantity ) ) * POD . QUANTITY_ORDERED / POLL . QUANTITY , decode ( cal . accounted_dr , NULL , - 1 * ABS ( rt . primary_quantity ) , ABS ( rt . primary_quantity ) ) ) Quantity , msi . primary_uom_code Primary_uom , round ( cal . rate_or_amount * : P_EXCHANGE_RATE , : cp_ext_precision ) Cost , nvl ( nvl ( cal . accounted_dr , - 1 * cal . accounted_cr ) , 0 ) * : P_EXCHANGE_RATE Value , cal . ae_line_id
FROM
cst_ae_headers cah ,
cst_ae_lines cal ,
mtl_system_items_vl msi ,
rcv_transactions rt ,
rcv_shipment_lines rsl ,
gl_code_combinations gcc ,
po_distributions_all pod ,
po_line_locations_all poll ,
mtl_item_categories mic
WHERE
pod . line_location_id = poll . line_location_id and
poll . line_location_id = rt . po_line_location_id and
pod . po_distribution_id = nvl ( rt . po_distribution_id , pod . po_distribution_id ) and
pod . po_distribution_id = cal . po_distribution_id and
cah . ae_header_id = cal . ae_header_id AND
cah . accounting_event_id = rt . transaction_id AND
cah . acct_event_source_table = 'RT' AND
cal . code_combination_id = gcc . code_combination_id AND
rt . shipment_line_id = rsl . shipment_line_id AND
NVL ( rt . consigned_flag , 'N' ) = 'N' AND
rsl . item_id = msi . inventory_item_id (+) AND
cah . organization_id = msi . organization_id AND
cah . cost_group_id = : P_cost_group_id AND
cah . cost_type_id = : P_cost_type_id AND
cah . period_id = : P_period_id AND
GCC.SEGMENT1 = '0731' AND
GCC.SEGMENT2 BETWEEN '75000' AND '95999' AND
GCC.SEGMENT3 BETWEEN '00000' AND '99999' AND
GCC.SEGMENT4 BETWEEN '00000' AND '99999' AND
GCC.SEGMENT5 = '0000' AND
GCC.SEGMENT6 = '00000' AND 1 = 1 AND 1 = 1 AND
rsl.item_id = mic.inventory_item_id
AND cah.organization_id = mic.organization_id
AND mic.category_set_id = 1 and 1 = 1
UNION ALL
SELECT rae . transaction_date Txn_date , GCC.SEGMENT1||'
'||GCC.SEGMENT2||'
'||GCC.SEGMENT3||'
'||GCC.SEGMENT4||'
'||GCC.SEGMENT5||'
'||GCC.SEGMENT6 C_acct_flex1 ,
MSI.SEGMENT1 C_item_flex1 ,
msi . description Description ,
decode ( : P_type_option ,
1 , rt . source_document_code , decode ( rae . event_type_id , 18 , raet . description , 19 , raet . description , 20 , raet . description , raet . event_type_name ) ) Type ,
0 Type_id , 0 Org_id , null Source , decode ( cal . accounted_dr , NULL , - 1 * ABS ( rae . primary_quantity ) , ABS ( rae . primary_quantity ) ) Quantity ,
msi . primary_uom_code Primary_uom ,
round ( cal . rate_or_amount * : P_EXCHANGE_RATE , : cp_ext_precision ) Cost ,
nvl ( nvl ( cal . accounted_dr , - 1 * cal . accounted_cr ) , 0 ) * : P_EXCHANGE_RATE Value ,
cal . ae_line_id
FROM
cst_ae_headers cah ,
cst_ae_lines cal ,
mtl_system_items msi ,
rcv_transactions rt ,
rcv_accounting_events rae ,
rcv_shipment_lines rsl ,
gl_code_combinations gcc ,
rcv_Accounting_event_types raet ,
mtl_item_categories mic
WHERE
cah . ae_header_id = cal . ae_header_id AND
cah . accounting_event_id = rae . accounting_event_id and
rae . rcv_transaction_id = rt . transaction_id AND
cah . acct_event_source_table = 'RAE' AND
cal . code_combination_id = gcc . code_combination_id AND
rt . shipment_line_id = rsl . shipment_line_id AND
NVL ( rt . consigned_flag , 'N' ) = 'N' AND
rsl . item_id = msi . inventory_item_id (+) AND
cah . organization_id = msi . organization_id AND
cah . cost_group_id = : P_cost_group_id AND
cah . cost_type_id = : P_cost_type_id AND
cah . period_id = : P_period_id AND
raet . event_type_id = rae . event_type_id AND
GCC.SEGMENT1 = '0731' AND
GCC.SEGMENT2 BETWEEN '75000' AND '95999'
AND GCC.SEGMENT3 BETWEEN '00000' AND '99999'
AND GCC.SEGMENT4 BETWEEN '00000' AND '99999'
AND GCC.SEGMENT5 = '0000'
AND GCC.SEGMENT6 = '00000' AND 1 = 1 AND 1 = 1
AND rsl.item_id = mic.inventory_item_id
AND cah.organization_id = mic.organization_id
AND mic.category_set_id = 1
ORDER BY 2 asc , 1 asc , 3 asc , 5 asc , 7 asc , 8 asc , 9 asc , 11 asc
是否有优化上述查询的条件?甚至您的小建议也会很有帮助