On Jul 24, 9:01 am, aark...@gmail.com wrote:
> Hi all,
>
[quoted text clipped - 21 lines]
>
> my question is to what extent this rule is true ?
As with all performance questions the answer is "it depends".
That is why there is EXPLAIN PLAN and other performance measures.
Here's the simple counter example for the 20% "rule"
SELECT * FROM sometable WHERE ColumnWith20Percent IS NULL;
since indices do not track NULLs.
You best bet is to remember that this is not a hard rule, but a
general guideline. The paragraph you quoted (or at least paraphrased)
hints at this since it says: "you may just want to try both methods".
to quote the raven: It's a guideline, nothing more.
HTH,
ed
Robert Klemme - 27 Jul 2008 13:27 GMT
> On Jul 24, 9:01 am, aark...@gmail.com wrote:
>> Hi all,
[quoted text clipped - 25 lines]
> As with all performance questions the answer is "it depends".
> That is why there is EXPLAIN PLAN and other performance measures.
Exactly.
> Here's the simple counter example for the 20% "rule"
> SELECT * FROM sometable WHERE ColumnWith20Percent IS NULL;
> since indices do not track NULLs.
Well, there *are* ways to make Oracle index NULL columns. :-) For
example, an index on multiple columns will contain NULL entries if there
are non NULL entries in other columns. See Richard's excellent blog for
more info, especially this entry
http://richardfoote.wordpress.com/2008/01/23/indexing-nulls-empty-spaces/
Using FBI's you can actually safe space by making use of the fact that
NULL's are not indexed. See also
http://richardfoote.wordpress.com/2008/01/28/index-only-values-of-interest-littl
e-wonder/
> You best bet is to remember that this is not a hard rule, but a
> general guideline. The paragraph you quoted (or at least paraphrased)
> hints at this since it says: "you may just want to try both methods".
> to quote the raven: It's a guideline, nothing more.
Absolutely agree!
Kind regards
robert
> Hi all,
>
[quoted text clipped - 21 lines]
>
> my question is to what extent this rule is true ?
The trouble with books written for dummies is that they often offer general
rules as a substitute for clear thinking.
Here's another exception to the 20% rule: if your query has an order by
clause.
select * from employees order by last_name, first_name;
If there is an index on last_name, first_name this query will run lots
faster using the index, because it saves the time spent sorting the results
from the table.
There are two things to consider when planning either indexing or queries:
First, if you are using the cost based optimizer (which most people do these
days) it becomes the optimizer's job to figure out whether to use the index
or scan the whole table. The optimizer often gets it right. You should pay
attention to strategy only when there's a reason to suspect the optimizer's
strategy.
Second, an index that pays off during a query also imposes a cost on
updates. You need to balance off performance gains during queiries against
performance losses during updates. You need to understand the traffic on
the database to get this right.
If you are actually a dummy, the best way to handle using indexes in Oracle
is to let somebody else do it. If you are not actually a dummy (hopefully
the case), you need to get beyond stuff written for dummies.