MySQL查询随机数据的4种方法和性能对比_MySQL
下面从以下四种方案分析各自的优缺点。
方案一:
SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;
这种方法的问题就是非常慢。原因是因为MySQL会创建一张零时表来保存所有的结果集,然后给每个结果一个随机索引,然后再排序并返回。
有几个方法可以让它快起来。
基本思想就是先获取一个随机数,然后使用这个随机数来获取指定的行。
由于所有的行都有一个唯一的id,我们将只取最小和最大id之间的随机数,然后获取id为这个数行。为了让这个方法当id不连续时也能有效,我们在最终的查询里使用”>=”代替”=”。
为了获取整张表的最小和最大id,我们使用MAX()和MIN()两个聚合函数。这两个方法会返回指定组里的最大和最小值。在这里这个组就是我们表里的所有id字段值。
方案二:
$range_result = mysql_query( " SELECT MAX(`id`) AS max_id , MIN(`id`) AS min_id FROM `table` ");
$range_row = mysql_fetch_object( $range_result );
$random = mt_rand( $range_row->min_id , $range_row->max_id );
$result = mysql_query( " SELECT * FROM `table` WHERE `id` >= $random LIMIT 0,1 ");
就像我们刚才提到的,这个方法会用唯一的id值限制表的每一行。那么,如果不是这样情况怎么办?
下面这个方案是使用了MySQL的LIMIT子句。LIMIT接收两个参数值。第一个参数指定了返回结果第一行的偏移量,第二个参数指定了返回结果的最大行数。偏移量指定第一行是0而不是1。
为了计算第一行的偏移量,我们使用MySQL的RAND()方法从0到1之间生成一个随机数。然后我们把这个数字跟我们用COUNT()方法获取倒的表记录数相乘。由于LIMIT的参数必须是int型而不能是float,我们使用FLOOR()来处理结果。FLOOR()会计算小于表达式的最大值。最终的代码就是这样:
方案三:
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` ");
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$result = mysql_query( " SELECT * FROM `table` LIMIT $offset, 1 " );
在MySQL 4.1以后我们可以使用子子查询合并上面两个方法:
方案四:
SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 1;
这个方案跟方案二有同样的弱点,只对有唯一id值的表有效。
记住我们最初寻找选择随机行的替代方法的原因,速度!所以,这些方案的在执行时间上的比较会怎么样?我不会指出硬件和软件配置或者给出具体的数字。大概的结果是这样的:
最慢的是解决方案一(我们假定它用了100%的时间)。
方案二用了79%
方案三

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam era maklumat hari ini, komputer peribadi memainkan peranan penting sebagai alat yang sangat diperlukan dalam kehidupan seharian kita. Sebagai salah satu perisian teras komputer, sistem pengendalian mempengaruhi pengalaman penggunaan dan kecekapan kerja kami. Di pasaran, sistem pengendalian Windows Microsoft sentiasa menduduki kedudukan yang dominan, dan kini orang ramai menghadapi pilihan antara Windows 11 terkini dan Windows 10 lama. Bagi pengguna biasa, apabila memilih sistem pengendalian, mereka tidak hanya melihat nombor versi, tetapi juga memahami kelebihan dan kekurangannya.

Templat: Kebaikan dan Keburukan Templat ialah teknik pengaturcaraan yang berkuasa yang membolehkan anda membuat blok kod yang boleh digunakan semula. Ia menawarkan pelbagai kelebihan, tetapi juga beberapa kelemahan. Kelebihan: Kebolehgunaan Semula Kod: Templat membolehkan anda mencipta kod biasa yang boleh digunakan semula sepanjang aplikasi anda, mengurangkan usaha pertindihan dan penyelenggaraan. Ketekalan: Templat memastikan bahawa coretan kod dilaksanakan dengan cara yang sama di lokasi yang berbeza, meningkatkan ketekalan dan kebolehbacaan kod. Kebolehselenggaraan: Perubahan pada templat ditunjukkan secara serentak dalam semua kod yang menggunakannya, memudahkan penyelenggaraan dan kemas kini. Kecekapan: Templat menjimatkan masa dan usaha kerana anda tidak perlu menulis kod yang sama berulang kali. Fleksibiliti: Templat membolehkan anda membuat blok kod yang boleh dikonfigurasikan yang boleh disesuaikan dengan mudah kepada keperluan aplikasi yang berbeza. kelemahan

JavaServlet ialah kelas Java yang digunakan untuk membina halaman web dinamik dan berfungsi sebagai jambatan antara klien dan pelayan. Prinsip kerja: menerima permintaan, memulakan Servlet, memproses permintaan, menjana respons dan menutup Servlet. Kelebihan: Mudah alih, berskala, selamat dan mudah digunakan. Kelemahan: Overhed, gandingan dan pengurusan negeri. Kes praktikal: Cipta Servlet ringkas untuk memaparkan "Hello, Servlet!"

Pilihan rangka kerja PHP bergantung pada keperluan projek dan kemahiran pembangun: Laravel: kaya dengan ciri dan komuniti aktif, tetapi mempunyai keluk pembelajaran yang curam dan overhed prestasi tinggi. CodeIgniter: ringan dan mudah dipanjangkan, tetapi mempunyai fungsi terhad dan kurang dokumentasi. Symfony: Bermodul, komuniti yang kuat, tetapi kompleks, isu prestasi. ZendFramework: Gred perusahaan, stabil dan boleh dipercayai, tetapi besar dan mahal untuk dilesenkan. Langsing: rangka kerja mikro, pantas, tetapi dengan fungsi terhad dan keluk pembelajaran yang curam.

Kelebihan dan Kelemahan Menggunakan Bahasa Cina untuk Menamakan Pembolehubah Java Dalam pengaturcaraan Java, kami biasanya menggunakan bahasa Inggeris untuk menamakan pengecam seperti pembolehubah, kaedah dan kelas. Walau bagaimanapun, kadangkala kita juga boleh mempertimbangkan untuk menggunakan bahasa Cina sebagai sebahagian daripada pengecam. Artikel ini akan meneroka kelebihan dan kekurangan menggunakan pembolehubah Java bernama Cina dan memberikan beberapa contoh kod khusus. Kelebihan 1: Meningkatkan kebolehbacaan kod Menggunakan pembolehubah Java bernama bahasa Cina boleh menjadikan kod lebih mudah difahami dan dibaca. Lagipun, otak kita memahami dan mengenali bahasa Cina dengan lebih semula jadi dan fasih daripada bahasa Inggeris. Untuk bukan bahasa Inggeris

Dengan perkembangan Golang, semakin banyak penyusun telah dibangunkan. Apabila memilih pengkompil, pembangun perlu mempertimbangkan banyak faktor, seperti kebolehpercayaan, prestasi, kemudahan penggunaan, dsb. Artikel ini akan meringkaskan beberapa penyusun Golang biasa dan meneroka kelebihan dan kekurangan mereka untuk membantu pembangun memilih pengkompil yang sesuai dengan mereka dengan lebih baik. Pengkompil rasmi Go Pengkompil rasmi Go ialah pengkompil lalai Golang dan pengkompil yang diiktiraf secara meluas dalam komuniti Golang. Ia mempunyai kelebihan berikut: kestabilan yang baik, saiz kecil dan penyusunan

Bahasa C dan Python: analisis senario yang boleh digunakan serta kelebihan dan kekurangan Dalam bidang pengaturcaraan komputer, bahasa C dan Python adalah dua bahasa pengaturcaraan yang sangat popular, masing-masing mempunyai kelebihan dan kekurangan yang unik dan sesuai untuk senario yang berbeza. Artikel ini akan menjalankan analisis mendalam bahasa C dan Python, membincangkan senario, kelebihan dan keburukan yang berkenaan. 1. Senario terpakai bahasa C: Bahasa C ialah bahasa pengaturcaraan berorientasikan proses dengan kecekapan tinggi dan prestasi cemerlang Ia sesuai untuk pembangunan perisian sistem, pemacu dan sistem terbenam yang memerlukan tahap kawalan dan kecekapan yang tinggi.

Rangka Kerja Java Kebaikan dan Keburukan: Kebaikan: Pembangunan dipercepatkan Kualiti kod yang dipertingkatkan Ekosistem yang kaya Penggunaan semula kod Keburukan: Overhed prestasi Kerumitan dan keluk pembelajaran Kekurangan fleksibiliti Beban penyelenggaraan
