Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Tuning a SQL statement with expensive function calls

Re: Tuning a SQL statement with expensive function calls

From: Edzard <edzard_at_volcanomail.com>
Date: 24 Jan 2002 08:42:05 -0800
Message-ID: <5d75e934.0201240842.5525056d@posting.google.com>


Hello,

The expensive, expensive function includes following query:

> select decode( count(*), 0,'f', 't') into exists_p
> from dual where exists (
> select /*+ ORDERED*/ 'x'
> from acs_object_grantee_priv_map ogpm,
> group_approved_member_map gmm
> where object_id = permission_p.object_id
> and gmm.member_id = permission_p.party_id
> and privilege = permission_p.privilege
> and ogpm.grantee_id = gmm.group_id);

I guess that the columns in the PK index on group_approved_member_map are (group_id , member_id). This is not very useful here.Try adding a secondary index on the same columns but in reverse order: (member_id, group_id).

> -- relational segment approved group
> select decode( count(*), 0,'f', 't') into exists_p
> from dual where exists (
> select /*+ FIRST_ROWS*/ 'x'
> from acs_object_grantee_priv_map ogpm,
> rel_seg_approved_member_map rsmm
> where object_id = permission_p.object_id
> and rsmm.member_id = permission_p.party_id
> and privilege = permission_p.privilege
> and ogpm.grantee_id = rsmm.segment_id);

Same: make sure there is an index on acs_object_grantee_priv_map (member_id, group_id) in that order.

Bye,

Edzard Received on Thu Jan 24 2002 - 10:42:05 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US