PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego planista przedstawia różne wyniki dla funkcji o różnych zmiennościach?

Szacuje 1000 wierszy

1000 Szacowane wiersze to domyślna wartość udokumentowana w CREATE FUNCTION :

Gdy funkcja jest zadeklarowana jako ulotna, prosi o to, aby nie była wbudowana, więc ta domyślna wartość dla result_rows trzyma.

Z drugiej strony, gdy jest on wbudowany w zapytanie, tak jak w drugim teście, liczba wierszy zostanie oszacowana tak, jakby ciało funkcji zostało przeniesione do zapytania, a deklaracja funkcji nie istniała. Prowadzi to w drugim teście do dokładnego oszacowania, ponieważ VALUES klauzula może być oceniana bezpośrednio.

Co dokładnie robi tutaj planista i gdzie mogę przeczytać dokumentację na ten temat?

Zasadniczo strategie optymalizacji planisty nie są wyjaśnione w głównej dokumentacji. Są one omawiane na listach dyskusyjnych i wspominane w komentarzach do kodu źródłowego, które na szczęście bywają wyjątkowo przejrzyste i dobrze napisane (w porównaniu z przeciętnym kodem źródłowym). W przypadku funkcji inliningu wierzę w komentarze inline_set_returning_functions i inline_set_returning_function ujawnić większość zasad kierujących tą konkretną optymalizacją. (ostrzeżenie:powyższe linki prowadzą do bieżącej gałęzi głównej, która może ulec zmianie lub dryfować w dowolnym momencie).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problemy z tabelą krzyżową/pivotem w PostgreSQL

  2. Partycjonowanie replikacji logicznej z PostgreSQL 13

  3. Czy istnieje sposób, aby pg_dump wykluczyć określoną sekwencję?

  4. Jak sprawdzić, czy długi lat mieści się w granicach miasta?

  5. Jak używać listy jako źródła parametrów dla zapytań SQL z klientem Vertx JDBC?