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).