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

Proč plánovač přichází s různými výsledky pro funkce s různou volatilitou?

Odhaduje se 1000 řádků

1000 odhadované řádky je výchozí hodnota zdokumentovaná v CREATE FUNCTION :

Když je funkce deklarována jako nestálá, požaduje, aby nebyla vložena, takže tato výchozí hodnota pro řádky_výsledků drží.

Na druhou stranu, když se to vkládá do dotazu jako ve vašem druhém testu, počet řádků bude odhadnut, jako kdyby tělo funkce bylo přesunuto do dotazu a deklarace funkce neexistovala. To vede ve druhém testu k přesnému odhadu od VALUES klauzuli lze přímo vyhodnotit.

Co přesně zde plánovač dělá a kde si k němu mohu přečíst nějakou dokumentaci?

Obecně nejsou optimalizační strategie plánovače vysvětleny v hlavní dokumentaci. Jsou diskutovány v mailing listech a zmíněny v komentářích ke zdrojovému kódu, které naštěstí bývají výjimečně jasné a dobře napsané (ve srovnání s průměrným zdrojovým kódem). V případě funkce inlining věřím komentářům inline_set_returning_functions a inline_set_returning_function odhalí většinu pravidel, která řídí tuto konkrétní optimalizaci. (varování:výše uvedené odkazy jsou do aktuální hlavní větve, která se může kdykoli změnit nebo posunout).




  1. Výmluvný:Volání Kam ve vztahu

  2. Jak mohu procházet databáze na serveru Oracle?

  3. SQL dotaz pro načtení dat finančního roku seskupených podle roku

  4. Jak najdu největší hodnotu ve sloupci v postgres sql?