Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Baris Rawak dengan Cekap daripada Jadual PostgreSQL Besar?
Apabila bekerja dengan set data yang besar, memilih baris rawak boleh menjadi tugas yang intensif dari segi pengiraan. Artikel ini meneroka pelbagai kaedah untuk mendapatkan semula baris rawak daripada jadual yang mengandungi kira-kira 500 juta baris dan membincangkan prestasi dan ketepatannya.
Kaedah pertama melibatkan penggunaan fungsi RANDOM() untuk menjana nombor rawak dan kemudian menggunakan klausa LIMIT untuk menapis keputusan untuk mendapatkan bilangan baris yang diperlukan.
<code class="language-sql">SELECT * FROM table WHERE RANDOM() < 0.000002 LIMIT 1000;</code>
Pendekatan ini mempunyai kelebihan kerana mudah dilaksanakan, tetapi mungkin tidak cekap untuk meja besar. Kerana klausa LIMIT, pangkalan data mesti mengimbas semua baris jadual untuk memilih baris rawak dan membuang yang lain.
Pendekatan lain ialah mengisih baris terlebih dahulu mengikut fungsi RANDOM() dan kemudian menggunakan klausa LIMIT untuk mendapatkan baris rawak.
<code class="language-sql">SELECT * FROM table ORDER BY RANDOM() LIMIT 1000;</code>
Kaedah ini serupa dengan kaedah pertama, tetapi pengisihan menjamin pemilihan baris rawak yang lebih cekap. Ia mengurangkan bilangan imbasan yang diperlukan, menjadikannya pilihan yang lebih baik untuk meja besar. Walau bagaimanapun, ia masih bukan pilihan terbaik untuk jadual dengan bilangan baris yang sangat besar.
Untuk jadual dengan lajur ID berangka dan jurang yang lebih sedikit, pendekatan yang lebih cekap boleh digunakan. Ini melibatkan penjanaan nombor rawak dalam julat ID dan menggunakannya untuk bergabung dengan jadual.
<code class="language-sql">WITH params AS ( SELECT 1 AS min_id, -- 最小 ID <= 当前最小 ID 5100000 AS id_span -- 四舍五入。(max_id - min_id + buffer) ) SELECT * FROM ( SELECT p.min_id + trunc(random() * p.id_span)::integer AS id FROM params p, generate_series(1, 1100) g -- 1000 + buffer GROUP BY 1 -- 去除重复项 ) r JOIN table USING (id) LIMIT 1000;</code>
Pendekatan ini memanfaatkan akses indeks untuk mengurangkan bilangan imbasan yang diperlukan dengan ketara. Ia sesuai untuk jadual dengan bilangan baris yang banyak dan sedikit jurang dalam lajur ID.
Cara terbaik untuk memilih baris rawak bergantung pada ciri jadual dan keperluan prestasi tertentu. Untuk jadual kecil, kaedah RANDOM() atau ORDER BY RANDOM() mungkin mencukupi. Walau bagaimanapun, untuk jadual besar dengan lajur ID berangka dan sedikit jurang, adalah disyorkan untuk menggunakan kaedah pengoptimuman di atas untuk prestasi terbaik.
Perlu diingat bahawa disebabkan sifat penjanaan nombor pseudo-rawak dalam komputer, tiada satu pun daripada kaedah ini dapat menjamin rawak sebenar. Walau bagaimanapun, mereka menyediakan cara praktikal untuk mendapatkan sampel rawak baris daripada jadual besar dengan kecekapan dan ketepatan yang munasabah.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris Rawak dengan Cekap daripada Jadual PostgreSQL Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!