Here are the recommendations I have for working nicely with Cardinaly feedback.
1) Make sure your statistics are accurate.
2) Try to use histograms where necessary for cadinality
3) Avoid functions on columns or anything that forces oracle to estimate cardinality.
4) Test a query more than once. Cardinality feedback doesn't show up until the second execution
5) Don't necessarily trust the "explain plan for" for any of the tools that gives you the explain plan based on the first execution. The first plan may change.
6) Use function based indexes on expressions (like the decode expression in my previous post), and gather statistics on the function based index
7) Create a histogram for indexes with composite keys, especially when the cardinality isn't as expected. The perfect example of this is a composite index on the column "Birth Month" and "Astrological Sign". There are only so many valid combiniations. Without a histogram, Oracle assumes a cartesion product, and estimates cardinality based on that.
I think it all comes down to Giving oracle as much information as possible, and then making sure you have tested the query a couple of times.
Often the development folks don't realize these things. They find "cheats" that only work the first time. They often rely on the explain plan for the first execution.
It is up to us in the DBA realm to educate developers on how things have changed with this feature.
1) Make sure your statistics are accurate.
2) Try to use histograms where necessary for cadinality
3) Avoid functions on columns or anything that forces oracle to estimate cardinality.
4) Test a query more than once. Cardinality feedback doesn't show up until the second execution
5) Don't necessarily trust the "explain plan for" for any of the tools that gives you the explain plan based on the first execution. The first plan may change.
6) Use function based indexes on expressions (like the decode expression in my previous post), and gather statistics on the function based index
7) Create a histogram for indexes with composite keys, especially when the cardinality isn't as expected. The perfect example of this is a composite index on the column "Birth Month" and "Astrological Sign". There are only so many valid combiniations. Without a histogram, Oracle assumes a cartesion product, and estimates cardinality based on that.
I think it all comes down to Giving oracle as much information as possible, and then making sure you have tested the query a couple of times.
Often the development folks don't realize these things. They find "cheats" that only work the first time. They often rely on the explain plan for the first execution.
It is up to us in the DBA realm to educate developers on how things have changed with this feature.
No comments:
Post a Comment