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

PostgresSQL Nested Loops – Кога планиращият решава да използва Nested Loop, когато прави INNER JOIN?

Планиращият не решава да използва определена стратегия за присъединяване въз основа на дълбоки разсъждения, той просто изгражда всички възможни стратегии за присъединяване, оценява разходите и избира най-евтината.

Въпреки това, свързването на вложен цикъл обикновено е най-добрият избор, ако външната таблица е малка, така че вътрешният цикъл да не се изпълнява често. Също така, индексът на условието за свързване на вътрешната таблица може значително да намали разходите за свързване на вложен цикъл и да го направи привлекателна стратегия.

Във вашия случай лошият избор се дължи на грешна оценка:

Foreign Scan on wind_forecast_recent w  (cost=... rows=1 ...) (actual ... rows=7 ...)

Това кара вътрешния цикъл да се изпълнява 7 пъти вместо веднъж, така че времето за изпълнение е 70 секунди, а не 10.

Трябва да събирате таблична статистика за wind_forecast_recent :

ANALYZE wind_forecast_recent;

Не забравяйте, че автоматичният анализ не лечение на чужди маси; трябва сам да се погрижиш за това.

Ако това не свърши работа, можете да опитате да зададете use_remote_estimate опция на чуждата таблица и се уверете, че статистическите данни на таблицата са точни в отдалечената база данни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP Postgres:Вземете ID на последното вмъкване

  2. Може ли Sqlalchemy да работи добре с множество прикачени файлове на SQLite база данни?

  3. initdb:не може да промени разрешенията на директорията в контейнера Postgresql

  4. ИЗБЕРЕТЕ появявания на комбинация от колони с минимално условие за БРОЯ

  5. PostgreSQL използва pg_trgm по-бавно от пълното сканиране