Rumah >pangkalan data >tutorial mysql >Mengapakah SELECT DISTINCT Lambat pada Jadual dengan Kunci Utama Komposit dalam PostgreSQL, dan Bagaimana Ia Boleh Dioptimumkan?
Pada jadual menggunakan kunci utama komposit dalam PostgreSQL SELECT DISTINCT
Sebab untuk kelajuan pertanyaan dan kaedah pengoptimuman yang perlahan
Dalam pangkalan data PostgreSQL, SELECT DISTINCT
kelajuan pelaksanaan pertanyaan bergantung pada struktur jadual dan pengedaran data. Walaupun lajur tickers
dalam jadual product_id
ialah sebahagian daripada kunci utama komposit dan oleh itu diindeks padanya, pertanyaan yang menggunakan SELECT DISTINCT product_id FROM tickers
untuk mendapatkan product_id
unik melakukan imbasan berjujukan secara lalai.
Sebab prestasi perlahan
Sebab utama prestasi perlahan ialah terdapat nilai pendua product_id
dalam jadual. Ini bermakna bagi setiap product_id
unik yang diambil, PostgreSQL mesti mengimbas keseluruhan jadual untuk memastikan tiada pendua.
Penyelesaian: simulasi imbasan langkau indeks
Memandangkan PostgreSQL belum lagi menyokong imbasan langkau indeks, anda boleh menggunakan CTE rekursif (ungkapan jadual biasa) untuk mensimulasikan tingkah laku ini. CTE ini mengambil semula dan membuang pendua secara berulang, menapis dengan berkesan semua kecuali satu contoh bagi setiap product_id
unik.
Penyelesaian yang dipertingkatkan
<code class="language-sql">WITH RECURSIVE cte AS ( ( -- 括号必需 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 ) TABLE cte;</code>
Pertanyaan ini menggunakan cantuman mendatar untuk melintasi jadual yang diisih dan mendapatkan nilai orderBy
unik menggunakan product_id
.
Kesimpulan
Masa pelaksanaan pertanyaan SELECT DISTINCT product_id
boleh dipertingkatkan dengan ketara dengan mensimulasikan imbasan langkau indeks menggunakan kaedah CTE, dengan itu mengurangkan masa yang diperlukan untuk mendapatkan tickers
unik daripada jadual product_id
.
Atas ialah kandungan terperinci Mengapakah SELECT DISTINCT Lambat pada Jadual dengan Kunci Utama Komposit dalam PostgreSQL, dan Bagaimana Ia Boleh Dioptimumkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!