sql >> Database >  >> RDS >> PostgreSQL

Waarom komt de planner met verschillende resultaten voor functies met verschillende volatiliteiten?

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




  1. Kan geen verbindingsreeks maken voor een extern bureaublad voor een C#-toepassing

  2. mysql-query toont meerdere tabellen uit één ID-kolom

  3. Hoe bepaalde kolommen uit een tabel te selecteren als de tabel meer dan 100 kolommen heeft?

  4. Verzend ajax-formulier en blijf op dezelfde pagina werkt niet