sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför kommer planeraren med olika resultat för funktioner med olika volatiliteter?

Det uppskattas till 1 000 rader

1000 uppskattade rader är ett standardvärde dokumenterat i SKAPA FUNKTION :

När en funktion förklaras flyktig ber den om att den inte ska infogas, så detta standardvärde för result_rader håller.

Å andra sidan, när den infogas i en fråga som i ditt andra test, kommer antalet rader att uppskattas som om funktionens kropp hade flyttats in i frågan och funktionsdeklarationen inte existerade. Detta leder i det andra testet till en exakt uppskattning sedan VALUES klausul kan utvärderas direkt.

Vad exakt gör planeraren här, och var kan jag läsa lite dokumentation om det?

I allmänhet förklaras inte planerarens optimeringsstrategier i huvuddokumentationen. De diskuteras i e-postlistor och nämns i källkodskommentarerna, som lyckligtvis tenderar att vara exceptionellt tydliga och välskrivna (jämfört med genomsnittlig källkod). När det gäller funktionsinlining tror jag på kommentarerna från inline_set_returning_functions och inline_set_returning_function avslöja de flesta av reglerna som driver just denna optimering. (varning:ovanstående länkar finns i den aktuella huvudgrenen som kan ändras eller avvika när som helst).




  1. Hur man skriver mysql-fråga för att kontrollera flera variabelval där formulärinlämning kan matcha 1 0f 5 fält

  2. PostgreSQL-begränsning - endast en rad kan ha flaggan

  3. PostgreSQL v13 distribution och skalning med ClusterControl 1.8.2

  4. Oracle - extrahera tidsstämpel från varchar-sträng?