Re: Query Improvement
- From: Jan Krueger <jk@xxxxxxxxxxxxxxxxxxxx>
- Date: Fri, 31 Aug 2007 20:50:53 +0200
purohitatul@xxxxxxxxx wrote:
On Aug 30, 9:07 am, Anurag Varma <avora...@xxxxxxxxx> wrote:The 10g CBO would also consider this rewriting. Even in older versions it should help to write it as an equijoin without IN or EXISTS and let the CBO decide about the driving table.On Aug 30, 11:53 am, "ame...@xxxxxxx" <ame...@xxxxxxx> wrote:Try "IN" instead..
On Aug 30, 10:18 am, Anurag Varma <avora...@xxxxxxxxx> wrote:You should specify *always* the oracle version. The above detailsOn Aug 30, 11:12 am, "ame...@xxxxxxx" <ame...@xxxxxxx> wrote:Was unaware that you had to also set these parameters:Hi All,You have a NVL(ind_id) index on broker_rep_lookup ... However, in the
I'm hoping someone can help me. I have the query below with the
explain plan. It takes more than 10 minutes to complete. There are
only 128 records in the table named INDUSTRY and about 150,000 records
in the table named BROKER_REP_LOOKUP, and BROKER_REP_LOOKUP is
actually a snapshot.
There are also the following indexes on the tables:
INDUSTRY: Index on IND_ID column.
BROKER_REP_LOOKUP: Functional Index on IND_ID. The function is NVL.
I see the table access is FULL on both the table and snapshot. I'm
not sure why this is, or why tables with such a small amount of
records takes so long.
I'm open to any help.
select name,ind_code
from industry a where exists
(select 'x' from broker_rep_lookup b where b.pdf = 'E' and
(b.participating = 'Y' or b.participating is null) and a.ind_code
= b.ind_id)
order by a.name;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=28 Card=13
Bytes=260)
1 0 SORT (ORDER BY) (Cost=28 Card=13 Bytes=260)
2 1 FILTER
3 2 TABLE ACCESS (FULL) OF 'INDUSTRY' (Cost=1 Card=13
Bytes=260)
4 2 TABLE ACCESS (FULL) OF 'BROKER_REP_LOOKUP' (Cost=2411
Card=3026 Bytes=21182)
Thanks in advance for your time.
query you do not use a NVL function for the join.
So thats why probably the index does not get used.
Anurag
QUERY_REWRITE_ENABLED=TRUE
QUERY_REWRITE_INTEGRITY=TRUSTED
Runs like lightening now.........
are version dependent.- Hide quoted text -
Though it is dependent on the amount of data your inner query is
returning.
select name
,ind_code
from industry a
where a.ind_code IN
(select b.ind_id
from broker_rep_lookup b
where b.pdf = 'E'
and (b.participating = 'Y' or b.participating is null))
order by a.name;
I also didn't understand the function based index. Could you tell us how
exactly this index is defined? As far as I know nvl() requires two parameters. I would suggest nvl(participating, 'Y'), but then you should use it in the same way it was defined
....
and nvl(b.participating, 'Y') = 'Y'
How is the distribution of the participating value?
Jan
.
- References:
- Query Improvement
- From: amerar@xxxxxxx
- Re: Query Improvement
- From: Anurag Varma
- Re: Query Improvement
- From: amerar@xxxxxxx
- Re: Query Improvement
- From: Anurag Varma
- Re: Query Improvement
- From: purohitatul
- Query Improvement
- Prev by Date: _DISTRIBUTED_LOCK_TIMEOUT parameter
- Next by Date: Re: Separate Index or Composite Indice ?
- Previous by thread: Re: Query Improvement
- Next by thread: Oracle permissions issue Oracle 9.2.0.7/Win 2003
- Index(es):
Relevant Pages
|