Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: Separate Index or Composite Indice ?
xhoster_at_gmail.com wrote:
> Jan Krueger <jk_at_stud.uni-hannover.de> wrote:
>> xhoster_at_gmail.com wrote: >>> "userjohn" <userjohn_at_mailinator.com> wrote: >>>> 10gR2 >>>> >>>> If you have : >>>> 2 columns on a hi-traffic transactional table >>>> - one ("some_id") high cardinality >>>> - and one ("yes_no") low cardinality >>>> >>>> You use both columns in SQL - "some_id" is used in JOIN and "yes_no" >>>> as a predicate >>> In the same SQL, or in separate SQLs? >>> >>>> Would you create normal index on BOTH , just "some_id" or a composite >>>> indice on "some_id" + "yes_no" ? >>> I generally wouldn't bother with a single column index on "yes_no". >>> I'd make one on (some_id,yes_no) and forget it. If it forces itself >>> back into your attention due to performance issues, then I'd look >>> at explain plans. >>> >> I would consider creating it the other way around (yes_no, some_id) >> because it >> allows an index skip scan to be performed if you need to look only for >> some_id.
> And if you specify just yes_no, the cluster factor would probably dictate
> against using the index at all, no matter which way around it is.
It depends on the value distribution of the yes_no column. I think it's
more a matter of the histogram than the clustering factor. If you have
only a few yes values i.e. the CBO should use the index in col = 'Y'
conditions. The clustering factor could be very good even in a two value
column if you sort the table by the value. Imagine a "to be processed
flag" where new lines to be processed are always appended and afterwards
processed. This gives a perfect low clustering factor, but using the
index is only usefull for "to be processed" = yes.
Jan Received on Sat Sep 01 2007 - 02:05:17 CDT