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: IOT seek vs index seek - index sizes and widths.

Re: IOT seek vs index seek - index sizes and widths.

From: Robert Klemme <shortcutter_at_googlemail.com>
Date: Tue, 24 Apr 2007 14:35:34 +0200
Message-ID: <596bs7F2jdtn6U1@mid.individual.net>


On 24.04.2007 13:28, phancey wrote:

> On 24 Apr, 11:52, Robert Klemme <shortcut..._at_googlemail.com> wrote:

>> On 24.04.2007 11:47, phancey wrote:
>>
>>
>>
>>> On 24 Apr, 10:27, sybrandb <sybra..._at_gmail.com> wrote:
>>>> On Apr 24, 10:52 am, phancey <d..._at_2bytes.co.uk> wrote:
>>>>> If I only want to select 2 columns out of 5 for example, and those 2
>>>>> columns are the primary key on an IOT, is it possible or even
>>>>> worthwhile to index them separately from the IOT? The IOT would be a
>>>>> much wider index and therefore require more memory? If the 2 columns
>>>>> are likely to be in physical order anyway, wouldn't the normal index
>>>>> perform better?
>>>>> In SQL Server I have been able to create a clustered index and a
>>>>> normal index on the same 2 columns. The optimiser chooses the normal
>>>>> index when selecting just those 2 columns. But it seems Oracle won't
>>>>> let me define the same 2 columns(in the same order) twice.
>>>>> Phil
>>>> It is not worthwhile as the optimizer would automagically select the
>>>> index and the index only.
>>>> Why would the IOT be a much wider index?
>>>> Why would a 'normal' index perform better.
>>>> Why would you need to create 2 indexes on identical columns? If that
>>>> can be done in sqlserver, sqlserver is an even bigger piece of crap
>>>> than I already thought.
>>> SQL Server shows better performance in the Explain Plan because IO
>>> Cost is reduced on the normal index (the IOT is effectively an index
>>> on the whole table and therefore covers all the columns whereas the
>>> normal index only covers the 2 specific columns, so it's narrower
>>> isn't it?)
>>> Yes it can be done in SQL Server, and seems to improve performance
>>> (over the same database with the same data only having the IOT, or
>>> clustered index as it is known in SS)
>>> So, given it only wants to select the 2 columns, would it not be
>>> quicker to select them from the normal index over the clustered? (more
>>> so the wider the table)
>> There are no clustered indexes in Oracle. While I am not sure about the
>> "Oracle will always be better than SQL Server" piece I certainly
>> strongly agree with Sybrand that you need to tune both databases
>> completely independently. It is a plain waste of time to figure out an
>> optimal setup on one product and try to "copy" that to the other -
>> regardless of direction.
> 
> trouble is when the historic application code is tightly coupled to
> the data layer (and no code changes are allowed), it restricts what is
> possible.

Your application code should only rely on the logical schema. If the application code in some way restricts physical DB design (indexes, table partitioning, tablespaces etc.) you likely have a big problem and you should change that.

> Also, you don't really want to be starting from scratch
> having optimized one setup. Realistically, you are not going to
> entirely ignore what you have spent time doing on one RDBMS as though
> it has no place in the other. It becomes your starting point and then
> you tweak it to optimize it for  the second.

While that may be true to a certain extent with indexes (i.e. an index on certain columns that are frequently used in WHERE clauses is a likely candidate to be created on the other system as well) you still need to be very careful. Basically you need to test and verify every single assumption that index X is going to improve performance.

Kind regards

        robert Received on Tue Apr 24 2007 - 07:35:34 CDT

Original text of this message

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