Bagaimana untuk memilih rekod secara rawak daripada jadual

WBOY
Lepaskan: 2024-01-15 14:18:16
ke hadapan
1279 orang telah melayarinya

Bagaimana untuk memilih rekod secara rawak daripada jadual

Cara memilih sekeping data secara rawak daripada jadual

Kaedah bacaan rawak Oracle bagi data N dalam jadual:

1) pilih * daripada (pilih * daripada susunan nama jadual mengikut sys_guid()) di mana rownum 2) pilih * daripada (pilih * daripada susunan nama jadual mengikut dbms_random.value) di mana rownum3) pilih * daripada (pilih * daripada sampel_nama_jadual(10) pesanan mengikut trunc(dbms_random.value(0, 1000))) di mana rownum Penerangan:

sample(10) bermaksud mendapatkan semula 10% daripada data dalam jadual Nilai sampel hendaklah antara [0.000001,99.999999], dengan sys_guid() dan dbms_random.value adalah kedua-dua fungsi dalaman

Nota:

Apabila menggunakan kaedah sys_guid(), kadangkala rekod yang sama akan diperolehi, iaitu set hasil pertanyaan sebelumnya adalah sama. Keadaan ini mungkin berkaitan dengan sistem pengendalian Sebagai contoh, ia adalah normal di bawah sistem Windows dan tidak normal di bawah sistem Linux. Di samping itu, mungkin terdapat masalah dengan fungsi sys_guid() itu sendiri dan kajian lanjut diperlukan.

Untuk memastikan bahawa data yang dibaca pada platform berbeza adalah rawak, disyorkan untuk menggunakan dua penyelesaian: 2) dan 3). Antaranya, penyelesaian 2) lebih biasa digunakan, dan penyelesaian 3) sesuai untuk menanyakan jadual besar dan tidak mengekstrak banyak data, dan boleh meningkatkan kelajuan pertanyaan.

Cara memilih beberapa rekod secara rawak daripada set data yang besar

Kaedah bacaan rawak Oracle bagi data N dalam jadual:

1

2

3

1) pilih * daripada (pilih * daripada susunan nama jadual mengikut sys_guid()) di mana rownum 2) pilih * daripada (pilih * daripada susunan nama jadual mengikut dbms_random.value) di mana rownum3) pilih * daripada (pilih * daripada sampel_nama_jadual(10) pesanan mengikut trunc(dbms_random.value(0, 1000))) di mana rownum

Penerangan:

sample(10) bermaksud mendapatkan semula 10% daripada data dalam jadual Nilai sampel hendaklah antara [0.000001,99.999999], dengan sys_guid() dan dbms_random.value adalah kedua-dua fungsi dalaman

Nota:

Apabila menggunakan kaedah sys_guid(), kadangkala rekod yang sama akan diperolehi, iaitu set hasil pertanyaan sebelumnya adalah sama. Keadaan ini mungkin berkaitan dengan sistem pengendalian Sebagai contoh, ia adalah normal di bawah sistem Windows dan tidak normal di bawah sistem Linux. Di samping itu, mungkin terdapat masalah dengan fungsi sys_guid() itu sendiri dan kajian lanjut diperlukan.

Untuk memastikan bahawa data yang dibaca pada platform berbeza adalah rawak, disyorkan untuk menggunakan dua penyelesaian 2) dan 3). Antaranya, penyelesaian 2) lebih biasa digunakan, dan penyelesaian 3) sesuai untuk menanyakan jadual besar dan tidak mengekstrak banyak data, dan boleh meningkatkan kelajuan pertanyaan.

Bagaimana untuk menanyakan rekod rawak dari jadual dalam oracle

Keperluan untuk bekerja pada hari ini adalah untuk mendapatkan semula rekod secara rawak daripada jadual yang agak besar, Tidak seperti MS SQLSERVER, Oracle boleh terus menggunakan Pilih TOP 1 * Dari TABLE Order By NewID () untuk mendapatkan rekod A secara rawak. Selepas banyak masalah, saya menggunakan t_id jadual dengan 900,000 rekod dan hanya satu medan gameid Tiada indeks pada medan ini. Jadual mengandungi satu siri rekod data dari 100000 hingga 999999 untuk ujian:

.

Kaedah 1.

Menggunakan rownum dan dbms_random.value, masa purata ialah 5 saat Kecekapan ini sememangnya terlalu rendah. Ia sepatutnya OK untuk meja kecil, tetapi ia tidak sesuai untuk meja besar.

isytiharkan

n_id nombor(6);

mulakan

PILIH gameid ke dalam n_id DARI(PILIH gameid DARI t_id T ORDER OLEH dbms_random.value()) WHERE ROWNUM=1;

dbms_output.put_line(to_char(n_id));

akhir;

/

Kaedah 2.

Menggunakan sintaks sampel oracle, menetapkan sampel rawak kepada 1%, hasilnya mengambil masa kira-kira 0.01, yang agak pantas, bagaimanapun, menurut laman web rasmi, menggunakan ciri pengumpulan sampel mungkin menghasilkan set hasil yang tidak tepat ujian kepada keputusan yang salah. Tetapi ada masalah, iaitu, pengagihan keputusan rawak sangat tidak sekata, dan hasilnya hampir semuanya disimpan dalam rekod 100000-200000. Walaupun kecekapannya baik, ia tidak mencapai kesan rawak yang baik Jika hasilnya tidak terlalu tinggi, kaedah ini agak baik.

isytiharkan

n_id nombor(6);

mulakan

PILIH gameid ke dalam n_id DARI T_id CONTOH (1) DI MANA ROWNUM = 1;

dbms_output.put_line(to_char(n_id));

akhir;

/

Kaedah 3.

Menggunakan sintaks tolak, mula-mula dapatkan nombor rawak secara rawak dalam julat jumlah bilangan rekod dalam jadual, kemudian tanya dua set hasil dengan hanya satu perbezaan rekod melalui rownum, dan gunakan tolak untuk menolak rekod dengan nombor rawak dalam pendahuluan. Masa purata Kira-kira 1 saat Lebih kecil nombor rawak, lebih cepat kelajuan pertanyaan Apabila nombor rawak ialah 20000, ia mengambil masa 0.016 saat. Walaupun kaedah ini

Ia boleh mendapat kesan yang sangat rawak, tetapi kecekapannya tidak sebaik kaedah 2. Jika kecekapan adalah purata, anda masih boleh mempertimbangkan untuk menggunakannya.

isytiharkan

n_count int:=0;

n_rand_num int:=0;

n_id nombor(6);

mulakan

PILIH COUNT(*) KE DALAM n_count DARI t_id;

PILIH trunc(dbms_random.value(1,n_count+1)) KE DALAM n_rand_num DARIPADA DUAL;

pilih gameid ke n_id dari (PILIH gameid DARI t_id T WHERE rownum

tolak

PILIH gameid DARI t_id T WHERE rownum

dbms_output.put_line(to_char(n_id));

akhir;

/

Atas ialah kandungan terperinci Bagaimana untuk memilih rekod secara rawak daripada jadual. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:docexcel.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan