Het schat 1000 rijen
1000
geschatte rijen is een standaardwaarde gedocumenteerd in CREATE FUNCTION
:
Wanneer een functie vluchtig wordt verklaard, vraagt deze om niet inline te zijn, dus deze standaardwaarde voor result_rows
houdt.
Aan de andere kant, wanneer het in een query wordt opgenomen, zoals in uw tweede test, wordt het aantal rijen geschat alsof de hoofdtekst van de functie naar de query is verplaatst en de functiedeclaratie niet bestaat. Dit leidt in de tweede test tot een exacte schatting aangezien de VALUES
clausule kan direct worden geëvalueerd.
Wat doet de planner hier precies en waar kan ik er documentatie over lezen?
Over het algemeen worden de optimalisatiestrategieën van de planner niet uitgelegd in de hoofddocumentatie. Ze worden besproken in mailinglijsten en vermeld in de commentaren op de broncode, die gelukkig uitzonderlijk duidelijk en goed geschreven zijn (vergeleken met de gemiddelde broncode). In het geval van functie-inlining, geloof ik dat de opmerkingen van inline_set_returning_functions en inline_set_returning_function onthullen de meeste regels die deze specifieke optimalisatie aansturen. (waarschuwing:bovenstaande links zijn in de huidige master branch die op elk moment kan veranderen of afwijken).