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;