Приблизително 1000 реда
1000
прогнозните редове е стойност по подразбиране, документирана в CREATE FUNCTIONкод>
:
Когато функция е декларирана като непостоянна, тя иска да не бъде вградена, така че тази стойност по подразбиране за result_rows
държи.
От друга страна, когато се вгражда в заявка, както във втория ви тест, броят на редовете ще бъде оценен така, сякаш тялото на функцията е било преместено в заявката и декларацията на функцията не съществува. Това води във втория тест до точна оценка, тъй като VALUES
клаузата може да бъде директно оценена.
Какво точно прави планировчикът тук и къде мога да прочета някаква документация за него?
Като цяло стратегиите за оптимизация на планиращия не са обяснени в основната документация. Те се обсъждат в пощенските списъци и се споменават в коментарите на изходния код, които за щастие обикновено са изключително ясни и добре написани (в сравнение със средния изходен код). В случай на вграждане на функции, вярвам на коментарите на inline_set_returning_functions и inline_set_returning_function разкрива повечето от правилата, управляващи тази конкретна оптимизация. (предупреждение:горните връзки са към текущия главен клон, който подлежи на промяна или промяна по всяко време).