PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgresSQL Nested Loops - Kapan perencana memutuskan untuk menggunakan Nested Loop saat melakukan INNER JOIN?

Perencana tidak memutuskan untuk menggunakan strategi bergabung tertentu berdasarkan penalaran yang mendalam, itu hanya membangun semua kemungkinan strategi bergabung, memperkirakan biaya dan memilih yang termurah.

Konon, gabungan loop bersarang biasanya merupakan pilihan terbaik jika tabel luarnya kecil, sehingga loop dalam tidak harus sering dieksekusi. Juga, indeks pada kondisi join dari tabel bagian dalam dapat sangat mengurangi biaya nested loop join dan menjadikannya strategi yang menarik.

Dalam kasus Anda, pilihan yang buruk adalah karena perkiraan yang salah:

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

Itu menyebabkan loop dalam dieksekusi 7 kali, bukan sekali, sehingga waktu eksekusi adalah 70 detik, bukan 10.

Anda harus mengumpulkan statistik tabel pada wind_forecast_recent :

ANALYZE wind_forecast_recent;

Ingat bahwa analisis otomatis tidak memperlakukan meja asing; Anda harus mengurusnya sendiri.

Jika tidak berhasil, Anda dapat mencoba menyetel use_remote_estimate pilihan pada tabel asing dan pastikan bahwa statistik tabel akurat pada database jarak jauh.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memanggil prosedur tersimpan dan mendapatkan nilai pengembalian di Slick (menggunakan Scala)

  2. Apakah ada cara untuk menonaktifkan pembaruan/penghapusan tetapi masih mengizinkan pemicu untuk melakukannya?

  3. Menambahkan objek dict ke postgresql

  4. Mengapa tipe data char dikonversi ke bpchar secara otomatis?

  5. Kueri Java terhadap PGPool II menyebabkan pernyataan siap yang tidak disebutkan namanya tidak ada kesalahan