Thread: Relation of indices to ANALYZE
Hello all, I'm putting together a database that has me wondering about the interaction of ANALYZE with indices. I guess the basic question is: are indices affected by the results of ANALYZE. The particular application I've got is doing a batch insert of lots of records. For performance, I'm dropping the indexes on the table, doing the inserts, then recreating the indexes a then doing a VACUUM ANALYZE. Specifically, I'm wondering if I should do the ANALYZE before or after I recreate the indexes, or whether it matters. Any feedbackis welcome. -- Bill Moran Potential Technologies http://www.potentialtech.com
On Thursday 17 Jul 2003 3:45 pm, Bill Moran wrote: > Hello all, > > I'm putting together a database that has me wondering about the interaction > of ANALYZE with indices. I guess the basic question is: are indices > affected by the results of ANALYZE. > > The particular application I've got is doing a batch insert of lots of > records. For performance, I'm dropping the indexes on the table, doing the > inserts, then recreating the indexes a then doing a VACUUM ANALYZE. > Specifically, I'm wondering if I should do the ANALYZE before or after I > recreate the indexes, or whether it matters. I don't think it matters - the analyse looks at the data, and then when you run a query the planner estimates how many rows each clause will require and checks if there is an index that will help. -- Richard Huxton
Bill Moran <wmoran@potentialtech.com> writes: > Specifically, I'm wondering if I should do > the ANALYZE before or after I recreate the indexes, or whether it matters. At the moment it does not matter --- ANALYZE computes statistics for each column of a table regardless of what indexes exist. There has been some talk of trying to compute statistics for the contents of functional indexes. Also, if we ever do anything about computing multicolumn correlation statistics, we'd likely choose which ones are worth computing based on the presence of multicolumn indexes. So if you want to future-proof your code I'd recommend recreating the indexes before you ANALYZE. regards, tom lane
Tom Lane wrote: > Bill Moran <wmoran@potentialtech.com> writes: > >>Specifically, I'm wondering if I should do >>the ANALYZE before or after I recreate the indexes, or whether it matters. > > > At the moment it does not matter --- ANALYZE computes statistics for > each column of a table regardless of what indexes exist. > > There has been some talk of trying to compute statistics for the > contents of functional indexes. Also, if we ever do anything about > computing multicolumn correlation statistics, we'd likely choose which > ones are worth computing based on the presence of multicolumn indexes. > So if you want to future-proof your code I'd recommend recreating the > indexes before you ANALYZE. Thanks, Tom (and everyone else who replied). I'm already recreating the indices prior to the VACUUM ANALYZE, since this puts the database back in a more usable state faster than doing the VACUUM first. It's good to know that it will probably be the proper way to do things in the future as well. -- Bill Moran Potential Technologies http://www.potentialtech.com