Index Tuning Features - Mailing list pgsql-hackers
From | Simon Riggs |
---|---|
Subject | Index Tuning Features |
Date | |
Msg-id | 1160495125.2659.1033.camel@holly Whole thread Raw |
Responses |
Re: Index Tuning Features
Re: Index Tuning Features Re: Index Tuning Features |
List | pgsql-hackers |
For 8.3, I'd like to add the following two related features to assist with Index Tuning and usability: - Virtual Indexes An index which only exists in the catalog, so is visible to the planner but not the executor. This is useful where a specific SQL query is being hand-tuned, allowing very specific options to be selected. Virtual indexes would only be seen by the planner when performing an EXPLAIN and when enable_virtual_index = on (default: off, Userset). Normal SQL statements would ignore them completely, whatever enable_virtual_index is set to. It would not be possible to have both a virtual and a real index defined identically at the same time. (If facilities existed to make temporary tables exist only for a single backend, rather than requiring catalog access then that implementation route would also work here, but until that does, simple updates seem fine). SQL: CREATE [VIRTUAL] [UNIQUE] INDEX ... - RECOMMEND command Similar in usage to an EXPLAIN, the RECOMMEND command would return a list of indexes that need to be added to get the cheapest plan for a particular query (no explain plan result though). At planning time, all possible single column indexes would be assumed to exist, plus all groups of cols that make up a multi-col Foreign Key would be assumed to make a multi-col index. (PKs always exist, remember). We track whether hypothetical indexes exist on the plan, so once the cheapest plan has been decided we can report what they are (if any). Hypothetical indexes last only for the duration of planning - no catalog changes are made. Command will return 1 row per selected index (can be more than one for a complex query), first col gives list of indexed cols, second col shows the SQL required to create that index. Virtual indexes will be noted, though treated identically to hypothetical indexes. The changes to do this would not be very invasive to the planner and mainly involve adding additional fields to the planner data structures, some additional branching code and command changes/additions. Overall we need both of these new features: RECOMMEND covers many cases in an easy to use form, with VIRTUAL indexes covers the rest of the search space for possible new indexes for specific cases. There's a host of other little tweaky bits we might imagine to enhance this capability further, but this seems to cover the basic requirements. Specifically, multi-column indexes are not considered very heavily in RECOMMEND. This is deliberate because a) we don't have good multi-col interaction stats (though we might have for 8.3?) b) it greatly increases the run-time of exhaustive searching and c) because we have bitmap index interaction the usefulness of multi-column indexes is much reduced anyhow, so cost/benefit not good. Comments? (I'll do a summary of feedback tomorrow.) -- Simon Riggs EnterpriseDB http://www.enterprisedb.com
pgsql-hackers by date: