Oracle FAQ Your Portal to the Oracle Knowledge Grid

Home -> Community -> Mailing Lists -> Oracle-L -> Re: Order by question - newbie

Re: Order by question - newbie

From: Stephane Faroult <>
Date: Tue, 28 Aug 2001 12:20:55 -0700
Message-ID: <>

Csillag Zsolt wrote:
> Hi,
> I have a table with 3 colums : PersonalCode, Name and SpecialOrder.
> The PersonalCode is the primary index and I have also an index on
> SpecialOrder,Name columns.
> However the following select:
> Select PersonalCode From MyTable
> Order By SpecialOrder,Name
> doesn't use the SpecialOrder,Name index at all.
> If I watch it in Explain Plan window I can see that :
> CHOOSE 1181 16378 2456700
> SORT ORDER BY 1181 16378 2456700
> TABLE ACCESS FULL ADMIN MyTable 69 16378 2456700
> How can I make the index work?
> Thank you in advance
> Zsolt Csillag
> Hungary

Using the index may not be the best of ideas. All right, everything is ordered in your index (let's totally forget about 'NLS sort', sorting 'logically' for a language which uses accentuated letters as opposed to the numerical ordering of ASCII (or EBCDIC) codes). You need to fully scan the index (since you have no WHERE condition) and for each row get its address (rowid), then fetch the relevant block in the table since the PersonalCode info IS NOT in the index. It is not at all obvious that it will be any better than a full scan, and obviously the optimizer thinks that it is not. You can force the index to be used with hints (use SET AUTOTRACE TRACEONLY under SQL*Plus, run the query without any hint, then run it with the appropriate hint - the best choice is the one with the smallest db block gets + consistent gets).   I don't know your data, but what could SpecialOrder + Name be considered as an alternative PK? If this could be made the 'official' PK, by creating a unique constraint on PersonalCode you could keep all your FKs on it, and you could consider an index-organized table. Really depends on what you want to do.


Stephane Faroult
Oriole Corporation
Voice:  +44  (0) 7050-696-269 
Fax:    +44  (0) 7050-696-449 
Performance Tools & Free Scripts
--------------------------------------------------------------, designed by Oracle DBAs for Oracle DBAs
Please see the official ORACLE-L FAQ:
Author: Stephane Faroult

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: (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).
Received on Tue Aug 28 2001 - 14:20:55 CDT

Original text of this message