sql >> Databáze >  >> RDS >> PostgreSQL

Jak mohu použít index na rozdělené tabulce v postgresql 8.3.7

Indexy fungují dobře, když provádějí skenování pouze relevantních oddílů v PostgreSQL. Ale musíte vše správně nastavit, aby to fungovalo, a je snadné vynechat krok v dlouhém seznamu věcí zdokumentovaných na http://www.postgresql.org/docs/current/static/ddl-partitioning.html

Hlavní věc, kterou je třeba si uvědomit, je, že abyste se vyhnuli sekvenčnímu skenování, musíte PostgreSQL poskytnout dostatek informací, aby mohl prokázat, že některé oddíly nemohou mít data, která hledáte; pak jsou přeskočeny jako potenciální zdroje pro výsledky dotazu. Článek, na který odkazujete, na to poukazuje jako na řešení problému sekvenčního skenování:„Pokud do pole data každého oddílu přidáte omezení rozsahu, lze tento dotaz optimalizovat do smyčky, kde se nejprve dotazujete na „nejnovější“ oddíl a pracujete zpět, dokud nenajdete jedinou hodnotu, která je vyšší než rozsah všech zbývajících oddílů."--ale neukazuje vylepšený plán, který byste viděli po této změně.

Některé běžné chyby, kterých jste se mohli dopustit:

-Parametr constraint_exclusion v souboru postgresql.conf je ve výchozím nastavení vypnutý. S tímto výchozím nastavením nedostanete to, co očekáváte.

-Nevytvořili se nepřekrývající se oddíly pomocí CHECK, což zabraňuje plánovači, aby věděl, co je uvnitř každého z nich. Tento krok je možné vynechat, ale přesto dostaňte svá data do správných oddílů správně, plánovač to prostě nebude vědět.

-Neumístil index na každý oddíl, pouze jej vytvořil na hlavní tabulce. To vám poskytne sekvenční skenování pouze na příslušném oddílu, takže to není tak špatné jako výše, ale ani dobré.

V nadcházejících vydáních PostgreSQL je práce na tom, aby to všechno bylo snazší (nastavení constraint_partition je ve 8.4 docela automatické a pracuje se na nějaké automatizaci nastavení oddílu). Právě teď, pokud budete pečlivě postupovat podle pokynů a vyhnout se všem těmto problémům, by to mělo fungovat.




  1. Rozdíl mezi jazykem sql a jazykem plpgsql ve funkcích PostgreSQL

  2. mysql_connect returning Nemůžete se připojit k místnímu serveru MySQL přes soket na připojení vzdáleného hostitele?

  3. přetypování plovoucího na desetinné místo v mysql

  4. Musí být výčet v MySQL NENÍ NULL?