Naposledy upraveno 29. 4. 2010 v 10:26

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

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.