4.24 Proč je příkaz "SELECT count(*) FROM velkatabulka;" pomalý?: Porovnání verzí

Z PostgreSQL
Skočit na navigaci Skočit na vyhledávání
imported>Pavel
 
(Žádný rozdíl)

Aktuální verze z 29. 4. 2010, 11:26

Protože nelze použít index (pokud existuje). PostgreSQL musí kontrolovat viditelnost každého řádku, tudíž se aktivuje sekvenční čtení tabulky. Pokud chcete, můžete si udržovat počet řádků v pomocné tabulce (a aktualizovat pomocí triggerů), počátejte ovšem s tím, že zpomalíte zápis do tabulky.

Místo exaktního počtu řádků tabulky by v některých případech stačil odhad. Ten je k dispozici - sloupec reltuples v tabulce pg_class obsahuje počet řádků při posledním provedení příkazu ANALYZE. Pozor - pravděpodobně vždy se bude toto číslo lišit od skutečnosti, to ovšem v řadě případů nemusí vadit.