PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо планиращият извежда различни резултати за функции с различна променливост?

Приблизително 1000 реда

1000 прогнозните редове е стойност по подразбиране, документирана в CREATE FUNCTION :

Когато функция е декларирана като непостоянна, тя иска да не бъде вградена, така че тази стойност по подразбиране за result_rows държи.

От друга страна, когато се вгражда в заявка, както във втория ви тест, броят на редовете ще бъде оценен така, сякаш тялото на функцията е било преместено в заявката и декларацията на функцията не съществува. Това води във втория тест до точна оценка, тъй като VALUES клаузата може да бъде директно оценена.

Какво точно прави планировчикът тук и къде мога да прочета някаква документация за него?

Като цяло стратегиите за оптимизация на планиращия не са обяснени в основната документация. Те се обсъждат в пощенските списъци и се споменават в коментарите на изходния код, които за щастие обикновено са изключително ясни и добре написани (в сравнение със средния изходен код). В случай на вграждане на функции, вярвам на коментарите на inline_set_returning_functions и inline_set_returning_function разкрива повечето от правилата, управляващи тази конкретна оптимизация. (предупреждение:горните връзки са към текущия главен клон, който подлежи на промяна или промяна по всяко време).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Моля, препоръчайте най-добрата опция за групово изтриване

  2. Postgresql таблици съществуват, но получаването на релация не съществува при запитване

  3. Връща набор от редове от функцията plpgsql.

  4. MySQL/Postgres заявка за данни с интервал от 5 минути

  5. Грешка в безизходица в израза INSERT