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

Home -> Community -> Usenet -> c.d.o.misc -> Re: How to optimize this query?

Re: How to optimize this query?

From: music4 <music4_at_163.net>
Date: Fri, 8 Aug 2003 14:47:24 +0800
Message-ID: <bgvh44$s29@netnews.proxy.lucent.com>

"Ryan Gaffuri" <rgaffuri_at_cox.net> wrote in message news:1efdad5b.0308070813.55e6a746_at_posting.google.com...
> "music4" <music4_at_163.net> wrote in message
news:<bgn6st$civ_at_netnews.proxy.lucent.com>...
> > Greetings,
> >
> > I have this query:
> >
> > select some field from tbl where flag1=0 and flag2=1 and flag3=2 and
flag4=3
> > and flag5=4
> >
> > flag1, flag2 and flag3 are all checked in (0,1,2,3,4,5).
> >
> > And I have a index on flag1, flag2 and flag3 since flag4 and flag5 in
more
> > case are constants(3 and 4).
> >
> > When tbl has huge number of data (over a half million records), I find
that
> > if tbl contains data meet query condition, the select performs well. But
if
> > not, the select cosumes huge resource.
> >
> > Do you have any idea to optimize this kind of query? I am using Oracle
> > 8.1.5.
> >
> > Thanks in advance!
> > Evan
>
>
> please post the exact query and explain plan including statistics What
> do you mean by consume alot of resources? how is performance?
>
> also please include an explain plan when data is returned. andrew may
> be right. try a bitmap index if this table does not have transactions
> on it.
>
> 500k records is not that many with the hardware we have today. What
> kind of system are you on?
>
> I need more details.

The application runs on a Sun Netra 1400 server that has two 440MHz CPU and 1 18G harddisk. When I said "consume alot of resources", I meant that the corresponding oracle process occupy more than 20% CPU resource, and caues system IO Wait to about 20%.

Since we have only Oracle 8.1.5 standard edition, bitmap index feature is not available.

The exact query like:

select count(*) from tbl_1 where flag1=1 and flag2<>0 and flag3<>-9 and flag4=101 and flag5<30000001

  COUNT(*)


         0

Execution Plan


   0 SELECT STATEMENT Optimizer=CHOOSE    1 0 SORT (AGGREGATE)

   2    1     COUNT (STOPKEY)
   3    2       TABLE ACCESS (BY INDEX ROWID) OF 'TBL_1'
   4    3         INDEX (RANGE SCAN) OF 'IND_TBL_1' (NON-UNIQUE)

Statistics


          0  recursive calls
          0  db block gets
        694  consistent gets
          0  physical reads
          0  redo size
       1090  bytes sent via SQL*Net to client
        791  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed

Do you have any idea on that?

Thanks,
Evan Received on Fri Aug 08 2003 - 01:47:24 CDT

Original text of this message

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