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

Kueri Postgres yang berjalan lambat

Penyebab kelambatan adalah perkiraan jumlah baris yang buruk yang membuat PostgreSQL memilih gabungan loop bersarang. Hampir seluruh waktu Anda dihabiskan untuk pemindaian indeks di hfj_res_link , yang diulang 1113 kali.

Upaya pertama saya adalah ANALYZE hfj_spidx_date dan lihat apakah itu membantu. Jika ya, pastikan analisis otomatis memperlakukan tabel itu lebih sering.

Upaya selanjutnya adalah

SET default_statistics_target = 1000;

lalu ANALYZE seperti di atas. Jika itu membantu, gunakan ALTER TABLE untuk meningkatkan STATISTICS pada hash_identity dan sp_value_high kolom.

Jika itu juga tidak membantu, dan Anda memiliki PostgreSQL versi terbaru, Anda dapat mencoba statistik yang diperluas :

CREATE STATISTICS myparamsda2_stats (dependencies)
   ON hash_identity, sp_value_high FROM hfj_spidx_date;

Kemudian ANALYZE tabel lagi dan lihat apakah itu membantu.

Jika semua itu tidak membantu, dan Anda tidak bisa mendapatkan perkiraan yang benar, Anda harus mencoba sudut pandang yang berbeda:

CREATE INDEX ON hfj_res_link (target_resource_id, src_resource_id);

Itu akan sangat mempercepat pemindaian indeks dan memberi Anda waktu respons yang baik.

Terakhir, jika tidak satu pun di atas memiliki efek apa pun, Anda dapat menggunakan ukuran dasar dari pelarangan penyambungan loop bersarang untuk kueri ini:

BEGIN;
SET LOCAL enable_nestloop = off;
SELECT /* your query goes here */;
COMMIT;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana saya bisa mendapatkan semua id mulai dari id yang diberikan secara rekursif dalam tabel postgresql yang mereferensikan dirinya sendiri?

  2. Bagaimana Fungsi Tersimpan Postgres mengembalikan tabel

  3. Postgres:bagaimana Anda membulatkan stempel waktu ke atas atau ke bawah ke menit terdekat?

  4. Hitung perbedaan bulan yang tepat antara dua tanggal

  5. Postgresql date_trunc dengan zona waktu menggeser zona sebesar 1 jam