I have a query which joins the table to itself - this bring the cost too high because all the time it brings full table scan for the self join - the number of the records to pull are not more then 20% of the table.Even if I put a hint a specific index the optimizer do not want to use it. How can I tune this query?
Thanks a lot.
MJ
qry:
SELECT aud.GROUP_ID change_value_1, aud.project_id change_value_2,
aud.GROUP_ID
|| '-'
|| aud.project_id
|| ' '
|| aud.group_desc item_modified,
x.total_points original_value, aud.total_points new_value,
aud.inf_app_user record_modified_by,
INITCAP (aud.inf_client_info) client_package_information,
aud.inf_module application, NULL record_created_on,
aud.inf_date_change record_modified_on,
DECODE (aud.inf_action_type,
'INSERT', 'TOTAL POINTS ADDED',
'DELETE', 'TOTAL POINTS REMOVED',
'TOTAL POINTS MODIFIED'
) modification_type
FROM inf_sls_group_inventory aud, inf_sls_group_inventory x
WHERE aud.inf_action_type = 'UPDATE'
AND x.GROUP_ID = aud.GROUP_ID
AND x.project_id = aud.project_id
AND x.total_points != aud.total_points
AND x.inf_action_type IN ('INSERT', 'UPDATE')
AND x.inf_id IN (
SELECT MAX (y.inf_id)
FROM inf_sls_group_inventory y
WHERE y.GROUP_ID = aud.GROUP_ID
AND y.project_id = aud.project_id
AND y.inf_id < aud.inf_id)
AND aud.inf_date_change BETWEEN TO_DATE ('20050201', 'YYYYMMDD')
AND TO_DATE ('20050228', 'YYYYMMDD') + .99999
expl plan:
Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop
SELECT STATEMENT Optimizer Mode=CHOOSE 1 787.524754295954
FILTER
HASH JOIN 1 99 740 TABLE ACCESS FULLPAUDIT.INF_SLS_GROUP_INVENTORY2 K162 K 364
TABLE ACCESS FULLPAUDIT.INF_SLS_GROUP_INVENTORY98 K2 M 364
SORT AGGREGATE 1 11
TABLE ACCESS BY INDEX ROWID PAUDIT.INF_SLS_GROUP_INVENTORY 3 33 47.5247542959539
BITMAP CONVERSION TO ROWIDS
BITMAP AND
BITMAP CONVERSION FROM ROWIDS
INDEX RANGE SCANPAUDIT.INF_PK_SLS_GRP_INV_IDX 1 K 3
BITMAP CONVERSION FROM ROWIDS
SORT ORDER BY
INDEX RANGE SCANPAUDIT.INF_SLS_GRP_INV_PK 1 K 4
Thanks a lot.
MJ
qry:
SELECT aud.GROUP_ID change_value_1, aud.project_id change_value_2,
aud.GROUP_ID
|| '-'
|| aud.project_id
|| ' '
|| aud.group_desc item_modified,
x.total_points original_value, aud.total_points new_value,
aud.inf_app_user record_modified_by,
INITCAP (aud.inf_client_info) client_package_information,
aud.inf_module application, NULL record_created_on,
aud.inf_date_change record_modified_on,
DECODE (aud.inf_action_type,
'INSERT', 'TOTAL POINTS ADDED',
'DELETE', 'TOTAL POINTS REMOVED',
'TOTAL POINTS MODIFIED'
) modification_type
FROM inf_sls_group_inventory aud, inf_sls_group_inventory x
WHERE aud.inf_action_type = 'UPDATE'
AND x.GROUP_ID = aud.GROUP_ID
AND x.project_id = aud.project_id
AND x.total_points != aud.total_points
AND x.inf_action_type IN ('INSERT', 'UPDATE')
AND x.inf_id IN (
SELECT MAX (y.inf_id)
FROM inf_sls_group_inventory y
WHERE y.GROUP_ID = aud.GROUP_ID
AND y.project_id = aud.project_id
AND y.inf_id < aud.inf_id)
AND aud.inf_date_change BETWEEN TO_DATE ('20050201', 'YYYYMMDD')
AND TO_DATE ('20050228', 'YYYYMMDD') + .99999
expl plan:
Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop
SELECT STATEMENT Optimizer Mode=CHOOSE 1 787.524754295954
FILTER
HASH JOIN 1 99 740 TABLE ACCESS FULLPAUDIT.INF_SLS_GROUP_INVENTORY2 K162 K 364
TABLE ACCESS FULLPAUDIT.INF_SLS_GROUP_INVENTORY98 K2 M 364
SORT AGGREGATE 1 11
TABLE ACCESS BY INDEX ROWID PAUDIT.INF_SLS_GROUP_INVENTORY 3 33 47.5247542959539
BITMAP CONVERSION TO ROWIDS
BITMAP AND
BITMAP CONVERSION FROM ROWIDS
INDEX RANGE SCANPAUDIT.INF_PK_SLS_GRP_INV_IDX 1 K 3
BITMAP CONVERSION FROM ROWIDS
SORT ORDER BY
INDEX RANGE SCANPAUDIT.INF_SLS_GRP_INV_PK 1 K 4