Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Baris Rawak dengan Cekap daripada Jadual PostgreSQL Besar?
Kaedah pemilihan baris rawak PostgreSQL
Kaedah pemilihan baris rawak tradisional tidak cekap dan perlahan apabila berurusan dengan jadual besar yang mengandungi berjuta-juta malah berbilion-bilion rekod. Dua kaedah biasa ialah:
Gunakan random()
untuk menapis:
<code class="language-sql"> select * from table where random() < 0.001;</code>
Gunakan order by random()
dan limit
:
<code class="language-sql"> select * from table order by random() limit 1000;</code>
Namun, disebabkan keperluan untuk imbasan jadual penuh atau pengisihan, kaedah ini bukanlah pilihan terbaik untuk jadual dengan bilangan baris yang banyak dan akan menyebabkan kesesakan prestasi.
Kaedah pengoptimuman untuk meja besar
Untuk jenis jadual berikut, pertimbangkan kaedah pengoptimuman berikut, yang jauh lebih pantas:
Pertanyaan:
<code class="language-sql">WITH params AS ( SELECT 1 AS min_id, -- 可选:自定义最小ID起始值 5100000 AS id_span -- 近似ID范围(最大ID - 最小ID + 缓冲) ) SELECT * FROM ( SELECT DISTINCT 1 + trunc(random() * p.id_span)::integer AS id FROM params p, generate_series(1, 1100) g GROUP BY 1 ) r INNER JOIN big ON r.id = big.id LIMIT 1000;</code>
Cara ia berfungsi:
Anggaran julat ID:
Penjanaan ID rawak:
Penyingkiran lebihan dan pendua:
Gabungan jadual dan sekatan:
Mengapa ia pantas:
Penggunaan indeks minimum:
Penjanaan nombor rawak yang dioptimumkan:
Penyingkiran lebihan dan pendua:
Pilihan lain:
CTE rekursif untuk menangani jurang:
Pembungkus fungsi untuk digunakan semula:
Fungsi universal untuk mana-mana jadual:
Realisasikan paparan untuk kelajuan:
TABLE SAMPLE
dalam PostgreSQL 9.5:
TABLE SAMPLE SYSTEM
" PostgreSQL untuk melaksanakan kaedah pensampelan baris yang lebih pantas tetapi kurang rawak, memastikan bilangan baris yang tepat dikembalikan. Walau bagaimanapun, perlu diingat bahawa sampel mungkin tidak rawak sepenuhnya disebabkan oleh kesan pengelompokan. 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!