MySQL Order By Rand()效率_MySQL
最近由于需要大概研究了一下MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。
但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。
但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上。查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低。
You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.
搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。
SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;
但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要0.01秒不到。
下面的语句采用的是JOIN,mysql的论坛上有人使用
SELECT *
FROM `table`
WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
ORDER BY id LIMIT 1;
我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距。总觉有什么地方不正常。
于是我把语句改写了一下。
SELECT * FROM `table`
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))
ORDER BY id LIMIT 1;
这下,效率又提高了,查询时间只有0.01秒
最后,再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。
完整查询语句是:
SELECT * FROM `table`
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))
ORDER BY id LIMIT 1;
SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;
最后在php中对这两个语句进行分别查询10次,
前者花费时间 0.147433 秒
后者花费时间 0.015130 秒
看来采用JOIN的语法比直接在WHERE中使用函数效率还要高很多

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

Perisian Pinduoduo menyediakan banyak produk yang bagus, anda boleh membelinya pada bila-bila masa dan di mana-mana sahaja, dan kualiti setiap produk dikawal ketat, setiap produk adalah tulen, dan terdapat banyak diskaun beli-belah keutamaan, membolehkan semua orang membeli-belah dalam talian. Masukkan nombor telefon mudah alih anda untuk log masuk dalam talian, tambahkan berbilang alamat penghantaran dan maklumat hubungan dalam talian, dan semak arah aliran logistik terkini pada bila-bila masa. Cari dan leret ke atas dan ke bawah untuk membeli dan membuat pesanan. Anda boleh mengalami kemudahan tanpa meninggalkan rumah Dengan perkhidmatan membeli-belah dalam talian, anda juga boleh melihat semua rekod pembelian, termasuk barangan yang telah anda beli, dan menerima berpuluh-puluh sampul merah beli-belah dan kupon Sekarang editor telah menyediakan maklumat dalam talian terperinci untuk Pengguna Pinduoduo untuk melihat rekod produk yang dibeli. 1. Buka telefon anda dan klik pada ikon Pinduoduo.

Cara Melihat Sejarah Perintah dalam Linux Di Linux, kami menggunakan perintah sejarah untuk melihat senarai semua arahan yang dilaksanakan sebelum ini. Ia mempunyai sintaks yang sangat mudah: sejarah Beberapa pilihan untuk berpasangan dengan perintah sejarah termasuk: Penerangan pilihan -c mengosongkan sejarah arahan untuk sesi semasa -w menulis sejarah arahan ke fail -r memuat semula sejarah arahan daripada fail sejarah - n Hadkan bilangan keluaran bagi perintah terkini Hanya jalankan perintah sejarah untuk melihat senarai semua perintah yang dilaksanakan sebelum ini dalam terminal Linux: Selain melihat sejarah arahan, anda juga boleh mengurus sejarah arahan dan melakukan pengubahsuaian pada perintah yang dilaksanakan sebelum ini, membalikkan cari sejarah arahan atau padam sejarah sepenuhnya

Rakaman panggilan dalam iPhone sering dipandang remeh dan merupakan salah satu ciri iPhone yang paling kritikal. Dengan kesederhanaannya, ciri ini amat penting dan boleh memberikan cerapan penting tentang panggilan yang dibuat atau diterima pada peranti. Sama ada untuk tujuan kerja atau prosiding undang-undang, keupayaan untuk mengakses rekod panggilan boleh terbukti tidak ternilai. Secara ringkas, sejarah panggilan merujuk kepada entri yang dibuat pada iPhone anda apabila anda membuat atau menerima panggilan. Log ini mengandungi maklumat penting, termasuk nama kenalan (atau nombor jika tidak disimpan sebagai kenalan), cap masa, tempoh dan status panggilan (didail, terlepas atau tidak dijawab). Ia adalah rekod ringkas tentang sejarah komunikasi anda. Sejarah panggilan termasuk jalur sejarah panggilan yang disimpan pada iPhone anda

Cadangan Pembangunan C#: Sistem Pembalakan dan Pemantauan Ringkasan: Dalam proses pembangunan perisian, sistem pembalakan dan pemantauan adalah alat penting. Artikel ini akan memperkenalkan peranan dan cadangan pelaksanaan sistem pembalakan dan pemantauan dalam pembangunan C#. Pengenalan: Pembalakan dan pemantauan adalah alat penting dalam projek pembangunan perisian berskala besar. Mereka boleh membantu kami memahami status berjalan program dalam masa nyata dan menemui serta menyelesaikan masalah dengan cepat. Artikel ini akan membincangkan cara menggunakan sistem pengelogan dan pemantauan dalam pembangunan C# untuk meningkatkan kualiti perisian dan kecekapan pembangunan. Peranan sistem pembalakan

Bagaimana untuk log dan memantau projek pembangunan Java 1. Pengenalan latar belakang Dengan perkembangan pesat Internet, semakin banyak syarikat telah mula membangunkan Java dan membina pelbagai jenis aplikasi. Dalam proses pembangunan, pembalakan dan pemantauan adalah pautan penting yang tidak boleh diabaikan. Melalui pembalakan dan pemantauan, pembangun boleh menemui dan menyelesaikan masalah dalam masa untuk memastikan kestabilan dan keselamatan aplikasi. 2. Kepentingan pembalakan 1. Penjejakan masalah: Apabila ralat aplikasi berlaku, pengelogan boleh membantu kami mencari masalah dengan cepat.

iPhone membolehkan anda menambah ubat dalam apl Kesihatan untuk menjejak dan mengurus ubat, vitamin dan suplemen yang anda ambil setiap hari. Anda kemudian boleh log ubat yang telah anda ambil atau langkau apabila anda menerima pemberitahuan pada peranti anda. Selepas anda mencatatkan ubat anda, anda boleh melihat kekerapan anda mengambil atau melangkaunya untuk membantu anda menjejaki kesihatan anda. Dalam siaran ini, kami akan membimbing anda untuk melihat sejarah log ubat yang dipilih dalam apl Kesihatan pada iPhone. Panduan ringkas tentang cara melihat sejarah log ubat anda dalam Apl Kesihatan: Pergi ke Apl Kesihatan>Semak imbas>Ubat>Ubat>Pilih Ubat>Pilihan&a

Kita semua tahu bahawa perkara di atas adalah perisian sukan yang sangat baik untuk kami, yang boleh membantu pengguna menyelesaikan pelbagai sukan dalam masa nyata, dan kami juga boleh melihat beberapa trajektori di atas semasa beberapa proses berjalan Anda boleh mengetahui lebih lanjut mengenainya 't tahu tentang beberapa maklumat fungsi di atas, jadi hari ini saya akan memberi anda penjelasan yang baik tentang beberapa kandungan dan pengalaman, supaya semua orang boleh menjalankan pelbagai fungsi dengan lebih baik Jika anda juga ingin tahu beberapa trek dan rekod tentang larian anda sendiri, pastikan anda tidak terlepas kandungan yang lebih berkualiti tinggi menanti anda untuk mengetahuinya. Banyak maklumat strategi yang menarik menanti anda dengan editor sekarang. ,

Bagaimana untuk mengosongkan sejarah iPhone dalam Safari? Untuk mengosongkan sejarah penyemakan imbas dan carian anda pada Safari Apple, anda perlu membuka apl Tetapan pada peranti anda. Selepas memilih Tetapan, anda perlu tatal ke bawah dan pilih Safari, kemudian menu lain akan muncul dan anda perlu memilih Kosongkan Sejarah dan Data Laman Web. Anda kini perlu memilih Kosongkan Sejarah dan Data daripada menu, yang akan memadamkan semua sejarah carian, sejarah penyemakan imbas, kuki dan data daripada penyemak imbas Safari Apple. Itu sahaja, semua sejarah penyemakan imbas dan sejarah carian anda yang terdahulu kini dipadamkan daripada Safari. Jika anda tidak mahu memadamkan semua sejarah carian dalam Safari
