![]() | |
![]() |
| | Thread Tools | Display Modes |
#41
| |||
| |||
|
|
"DA Morgan" <damorgan (AT) psoug (DOT) org> schreef in bericht news:1208624947.696580 (AT) bubbleator (DOT) drizzle.com... Shakespeare wrote: But an index may become useful over time, true? Shakespeare On that basis alone one could justify putting an index on every column of every table so I will respectfully disagree unless you write a very broad definition of "may." You need to understand your data and how it is being accessed. The extra overhead of an unused index is not value added. My recommendation would be to use the DBMS_STATS.SET.... procedures to see how queries will react to the expected future growth of both tables and indexes. -- Daniel A. Morgan Oracle Ace Director & Instructor University of Washington damorgan@x.washington.edu (replace x with u to respond) Puget Sound Oracle Users Group www.psoug.org I was aiming at data with for example a 'year' column. This column could be indexed by design, but in the first year (all records same value) this index is not useful and won't be used. But on the first entry in the second year it is useful to find entries of that year and so on. A script to remove or disable unused indexes would remove/disable this index in the first year. Shakespeare |
#42
| |||
| |||
|
|
Shakespeare wrote: "DA Morgan" <damor... (AT) psoug (DOT) org> schreef in bericht news:1208624947.696580 (AT) bubbleator (DOT) drizzle.com... Shakespeare wrote: But an index may become useful over time, true? Shakespeare On that basis alone one could justify putting an index on every column of every table so I will respectfully disagree unless you write a very broad definition of "may." You need to understand your data and how it is being accessed. The extra overhead of an unused index is not value added. My recommendation would be to use the DBMS_STATS.SET.... procedures to see how queries will react to the expected future growth of both tables and indexes. -- Daniel A. Morgan Oracle Ace Director & Instructor University of Washington damor...@x.washington.edu (replace x with u to respond) Puget Sound Oracle Users Group www.psoug.org I was aiming at data with for example a 'year' column. This column could be indexed by design, but in the first year (all records same value) this index is not useful and won't be used. But on the first entry in the second year it is useful to find entries of that year and so on. A script to remove or disable unused indexes would remove/disable this index in the first year. Shakespeare Interesting example. |
|
First year the index is worthless. Second year it is valuable for some short amount of time and then, again, may become useless as the percentage of records in each of the two years approaches 50%. Go for the third year ... again possibly usable for some period of time and then all three years probably tend toward 33.3%. By the end of year four you are going for 25%. |
|
I would not be all that ready to build that index unless I know, again using DBMS_STATS.SET_TABLE_STATS and SET_INDEX_STATS how Oracle was going to use it. That is not to say the index might not make a lot of sense ... I just would insist on testing any assumption before deciding to either build it or not. |
#43
| |||
| |||
|
|
Shakespeare wrote: "DA Morgan" <damor... (AT) psoug (DOT) org> schreef in bericht news:1208624947.696580 (AT) bubbleator (DOT) drizzle.com... Shakespeare wrote: But an index may become useful over time, true? Shakespeare On that basis alone one could justify putting an index on every column of every table so I will respectfully disagree unless you write a very broad definition of "may." You need to understand your data and how it is being accessed. The extra overhead of an unused index is not value added. My recommendation would be to use the DBMS_STATS.SET.... procedures to see how queries will react to the expected future growth of both tables and indexes. -- Daniel A. Morgan Oracle Ace Director & Instructor University of Washington damor...@x.washington.edu (replace x with u to respond) Puget Sound Oracle Users Group www.psoug.org I was aiming at data with for example a 'year' column. This column could be indexed by design, but in the first year (all records same value) this index is not useful and won't be used. But on the first entry in the second year it is useful to find entries of that year and so on. A script to remove or disable unused indexes would remove/disable this index in the first year. Shakespeare Interesting example. |
|
First year the index is worthless. Second year it is valuable for some short amount of time and then, again, may become useless as the percentage of records in each of the two years approaches 50%. Go for the third year ... again possibly usable for some period of time and then all three years probably tend toward 33.3%. By the end of year four you are going for 25%. |
|
I would not be all that ready to build that index unless I know, again using DBMS_STATS.SET_TABLE_STATS and SET_INDEX_STATS how Oracle was going to use it. That is not to say the index might not make a lot of sense ... I just would insist on testing any assumption before deciding to either build it or not. |
#44
| |||
| |||
|
|
Shakespeare wrote: "DA Morgan" <damor... (AT) psoug (DOT) org> schreef in bericht news:1208624947.696580 (AT) bubbleator (DOT) drizzle.com... Shakespeare wrote: But an index may become useful over time, true? Shakespeare On that basis alone one could justify putting an index on every column of every table so I will respectfully disagree unless you write a very broad definition of "may." You need to understand your data and how it is being accessed. The extra overhead of an unused index is not value added. My recommendation would be to use the DBMS_STATS.SET.... procedures to see how queries will react to the expected future growth of both tables and indexes. -- Daniel A. Morgan Oracle Ace Director & Instructor University of Washington damor...@x.washington.edu (replace x with u to respond) Puget Sound Oracle Users Group www.psoug.org I was aiming at data with for example a 'year' column. This column could be indexed by design, but in the first year (all records same value) this index is not useful and won't be used. But on the first entry in the second year it is useful to find entries of that year and so on. A script to remove or disable unused indexes would remove/disable this index in the first year. Shakespeare Interesting example. |
|
First year the index is worthless. Second year it is valuable for some short amount of time and then, again, may become useless as the percentage of records in each of the two years approaches 50%. Go for the third year ... again possibly usable for some period of time and then all three years probably tend toward 33.3%. By the end of year four you are going for 25%. |
|
I would not be all that ready to build that index unless I know, again using DBMS_STATS.SET_TABLE_STATS and SET_INDEX_STATS how Oracle was going to use it. That is not to say the index might not make a lot of sense ... I just would insist on testing any assumption before deciding to either build it or not. |
#45
| |||
| |||
|
|
Shakespeare wrote: "DA Morgan" <damor... (AT) psoug (DOT) org> schreef in bericht news:1208624947.696580 (AT) bubbleator (DOT) drizzle.com... Shakespeare wrote: But an index may become useful over time, true? Shakespeare On that basis alone one could justify putting an index on every column of every table so I will respectfully disagree unless you write a very broad definition of "may." You need to understand your data and how it is being accessed. The extra overhead of an unused index is not value added. My recommendation would be to use the DBMS_STATS.SET.... procedures to see how queries will react to the expected future growth of both tables and indexes. -- Daniel A. Morgan Oracle Ace Director & Instructor University of Washington damor...@x.washington.edu (replace x with u to respond) Puget Sound Oracle Users Group www.psoug.org I was aiming at data with for example a 'year' column. This column could be indexed by design, but in the first year (all records same value) this index is not useful and won't be used. But on the first entry in the second year it is useful to find entries of that year and so on. A script to remove or disable unused indexes would remove/disable this index in the first year. Shakespeare Interesting example. |
|
First year the index is worthless. Second year it is valuable for some short amount of time and then, again, may become useless as the percentage of records in each of the two years approaches 50%. Go for the third year ... again possibly usable for some period of time and then all three years probably tend toward 33.3%. By the end of year four you are going for 25%. |
|
I would not be all that ready to build that index unless I know, again using DBMS_STATS.SET_TABLE_STATS and SET_INDEX_STATS how Oracle was going to use it. That is not to say the index might not make a lot of sense ... I just would insist on testing any assumption before deciding to either build it or not. |
#46
| |||
| |||
|
#47
| |||
| |||
|
#48
| |||
| |||
|
#49
| |||
| |||
|
#50
| |||
| |||
|
|
joel garry (joel-ga... (AT) home (DOT) com) wrote: : On Apr 18, 2:29=A0am, Andreas Mosmann <mosm... (AT) expires-30-04-2008 (DOT) news-: group.org> wrote: : > Thank both of you, : : > I will try it out. : > Is there also a way to determine what index is still needed/useful fora : > special query? : : > Andreas Mosmann : : > -- : > wenn email, dann AndreasMosmann <bei> web <punkt> de : I do believe that is the downside of deleting indices based on usage. : It only shows what's been used during the observation. *That implies a : bad assumption that the usage is completely stable. *To me, this seems : worse than just dropping an index and seeing who screams, since when : there is a problem in the future, you have to go through an entire : performance tuning workup because the linkage to the act of dropping : the index is obscured. *Maybe I'm missing the concept. *What about an : index that would be used when you pass some tipping point or boundary : condition or upgrade or change a session parameter? You can disable an index. *That way the definition exists but the index is never used or maintained (i.e. no overhead). *If you decide it is needed you simply enable it. |
|
"when you pass some tipping point" If an index is enabled then presumably it will only be used when the CBO decides it is useful for a query. |
![]() |
| Thread Tools | |
| Display Modes | |
| |