There are also a lot of cases where you can get rid of a subquery. Consider
the following

SELECT DISTINCT emplid
FROM    emp_history eh1
WHERE  salary > 100000;

SELECT emplid
FROM   emp_history eh1
WHERE  rowid = (SELECT MAX(rowid)
    FROM  emp_history eh2
    WHERE  eh1.emplid = eh2.emplid
    AND    eh2.salary > 100000)

Kevin

-----Original Message-----
Sent: Wednesday, June 20, 2001 4:17 PM
To: Multiple recipients of list ORACLE-L


"Toepke, Kevin M" wrote:
> 
> As I see it, there are several questions here:
> 1)      Can I use DISTINCT to do a sort?
>         Yes and no. In Oracle 7, a DISTINCT does an implicit sort
>         In Oracle 8, it does a "SORT NOSORT" operation. Dupicates are
> removed but the output is NOT guaranteed to be in sorted order.
> 2)      How do I sort the output?
>         Use the "ORDER BY" clause as in:
>                 SELECT a, b, c FROM tab_1 ORDER BY a, b, c
> 3)      How do I get around the performance hit of a SORT operation?
>         In Oracle 8.0 through 8.1.6 (fixed in 9i and 8.1.7) there is a bug
> that causes the optimizer to choose a horrendous execution path if you are
> ordering by a column that is referenced in the WHERE clause.
> 
>         Workaround From:
>                 SELECT a, b, c FROM tab_1 WHERE a > 33 ORDER BY a, b, c:
>         to:
>                 SELECT /*+ NO_MERGE(d) */ a, b, c FROM (
>                         SELECT a, b, c FROM tab_1 WHERE a > 33
>                 ) ORDRE BY a, b, c;
> 
> Kevin
> 
> -----Original Message-----
> Sent: Wednesday, June 20, 2001 1:50 PM
> To: Multiple recipients of list ORACLE-L
> 
> Hi
> In a sql stmt what will be the impact if we used DISTINCT clause and how
we
> can overcomes on the performance bottleneck caused by DISTINCT.
> like ... SELECT DISTINCT A,B,C FROM TAB_1
> I want to get same output without using distinct?Is this possible?If, YES
> then how?
> Thanks in advance
> -Seema

I can't see any way of getting rid of a DISTINCT if a single table is
involved - unless you are querying the wrong table and in fact you'd
rather query a table for which what you are looking for is the primary
key. When I see a DISTINCT and a join, it usually smells of lazy
programming and in most cases you can get rid of it with a correlated
subquery.
-- 
Regards,

Stephane Faroult
Oriole Corporation
Voice:  +44  (0) 7050-696-269 
Fax:    +44  (0) 7050-696-449 
Performance Tools & Free Scripts
--------------------------------------------------------------
http://www.oriole.com, designed by Oracle DBAs for Oracle DBAs
--------------------------------------------------------------
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Stephane Faroult
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Toepke, Kevin M
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to