Den anslår 1000 rækker
1000
estimerede rækker er en standardværdi dokumenteret i OPRET FUNKTION
:
Når en funktion erklæres flygtig, beder den om ikke at blive inlinet, så denne standardværdi for result_rows
holder.
På den anden side, når det bliver inlinet i en forespørgsel som i din anden test, vil antallet af rækker blive estimeret, som om funktionens krop var blevet flyttet ind i forespørgslen, og funktionserklæringen ikke eksisterede. Dette fører i den anden test til et nøjagtigt estimat siden VALUES
klausul kan evalueres direkte.
Hvad er det præcis, planlæggeren laver her, og hvor kan jeg læse noget dokumentation om det?
Generelt er planlæggerens optimeringsstrategier ikke forklaret i hoveddokumentationen. De bliver diskuteret i mailinglister og nævnt i kildekodekommentarerne, som heldigvis har en tendens til at være usædvanligt klare og velskrevne (sammenlignet med gennemsnitlig kildekode). I tilfælde af funktionsinlining tror jeg på kommentarerne fra inline_set_returning_functions og inline_set_returning_function afsløre de fleste regler, der driver denne særlige optimering. (advarsel:ovenstående links er i den aktuelle mastergren, som kan ændres eller afvikles når som helst).