PostgreSQL SELECT DISTINCT
Isu Prestasi dengan Kekunci Komposit
Menggunakan SELECT DISTINCT
pada jadual PostgreSQL dengan kunci utama komposit (cth., (product_id, trade_id)
) boleh menjadi sangat perlahan. Perancang pertanyaan selalunya memilih imbasan berurutan dan bukannya menggunakan indeks dengan cekap.
Kenapa Lambat?
Penyelesaian: Mensimulasikan Imbasan Langkau Indeks dengan CTE
Walaupun imbasan langkau indeks sebenar tidak tersedia, kami boleh meniru gelagatnya dengan berkesan menggunakan Ungkapan Jadual Biasa (CTE) rekursif:
WITH RECURSIVE cte AS ( ( -- parentheses are crucial SELECT product_id FROM tickers ORDER BY 1 LIMIT 1 ) UNION ALL SELECT l.* FROM cte c CROSS JOIN LATERAL ( SELECT product_id FROM tickers t WHERE t.product_id > c.product_id ORDER BY 1 LIMIT 1 ) l ) SELECT * FROM cte;
CTE ini berulang melalui nilai product_id
unik dalam tertib diisih, memanfaatkan indeks pada (product_id)
untuk kecekapan.
Kelebihan Pendekatan ini
(product_id, trade_id)
dan indeks pada (product_id)
dengan berkesan.Atas ialah kandungan terperinci Mengapa Pertanyaan DISTINCT PostgreSQL SELECT Saya dengan Kunci Utama Komposit Sangat Lambat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!