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: Possible Performance Improvement to Select Statement

Re: Possible Performance Improvement to Select Statement

From: Niall Litchfield <niall.litchfield_at_dial.pipex.com>
Date: 3 Feb 2005 06:59:08 -0800
Message-ID: <1107442748.340431.40330@g14g2000cwa.googlegroups.com>


Paul Izzo wrote:
> The following select statement works for me but it takes a lot of
> process time and is rather slow. I'd like to know if there's another
> way of doing the same query only faster and less process time
> intensive.
>
> The following script contains 2 queries that use 2 tables. One query
> is used only to exclude a certain range of data.
>
> select distinct pkvk.CUST_JOB_NR
> from pkvk,pkvp
> where pkvk.JOB_STATUS != 9
> and pkvp.CUST_JOB_NR = pkvk.CUST_JOB_NR
> and pkvp.CUST_JOB_TYPE = pkvk.CUST_JOB_TYPE
> and pkvk.CUST_JOB_NR
>
> not in (select distinct pkvk.CUST_JOB_NR
> from pkvp,pkvk
> where pkvk.JOB_STATUS != 9
> and pkvp.CUST_JOB_NR = pkvk.CUST_JOB_NR
> and pkvp.CUST_JOB_TYPE = pkvk.CUST_JOB_TYPE
> and pkvp.POSITIONS_STATUS != 9)

Isn't this equivalent to

select distinct pkvk.CUST_JOB_NR
from pkvk,pkvp
where pkvk.JOB_STATUS != 9

and pkvp.CUST_JOB_NR = pkvk.CUST_JOB_NR
and pkvp.CUST_JOB_TYPE = pkvk.CUST_JOB_TYPE
and pkvp.POSITIONS_STATUS = 9;

i.e only include records that match to one with a positions_status of 9 rather than exclude ones that don't?

Even if it isn't you don't need the distinct in the not in query (so you can possibly avoid a sort) and as others have said not exists might well be faster.

Niall Litchfield
Oracle DBA
http://www.niall.litchfield.dial.pipex.com Received on Thu Feb 03 2005 - 08:59:08 CST

Original text of this message

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