mysql 返回随机行_从mysql数据库返回随机行而不使用rand()
我希望能夠從數據庫中取回15條左右的記錄。我已經看到,使用WHERE id = rand()會導致性能問題,因為我的數據庫變得更大。我所見過的所有解決方案都適用于選擇一個隨機記錄。我想獲得倍數。從mysql數據庫返回隨機行而不使用rand()
有誰知道有效的方法來做到這一點的大型數據庫?
編輯:
進一步編輯和測試:
我使用的MyISAM做了一個非常簡單的表格,一個新的數據庫上。我給了這3個字段:autokey(無符號自動數字鍵)bigdata(一個大的斑點)和somemore(一個中等的int)。 然后,我將隨機數據應用到表中,并使用Navicat運行一系列查詢。下面是結果:
Query 1: select * from test order by rand() limit 15
Query 2: select *
from
test
join
(select round(rand()*(select max(autokey) from test)) as val from test limit 15) as rnd
on
rnd.val=test.autokey;`
(我試過兩個選擇,選擇不同的和它并沒有明顯的差異)
和:
Query 3 (I only ran this on the second test):
SELECT *
FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 10
FROM test
) vars
STRAIGHT_JOIN
(
SELECT r.*,
@lim := @lim - 1
FROM test r
WHERE (@cnt := @cnt - 1)
AND RAND(20090301) < @lim/@cnt
) i
ROWS: QUERY 1: QUERY 2: QUERY 3:
2,060,922 2.977s 0.002s N/A
3,043,406 5.334s 0.001s 1.260
我想要做更多的行,所以我可以看到查詢3是如何縮放的,但是在這個時候電話,它似乎好像清晰的贏家是查詢2。
我之前包裹了這個測試,并宣布一個答案,而我擁有所有這些數據和測試環境的搭建,任何人都可以提出任何進一步的測試?
+0
這些可能會有所幫助:http://stackoverflow.com/questions/142242/what-是最好的方式來挑選一個隨機排從一個表在MySQL中,http://stackoverflow.com/questions/1244555/how-can-i-optimize-mysqls- order-by-rand-function,http://stackoverflow.com/questions/1868102/order-by-rand-alternative –
2010-08-03 15:12:06
總結
以上是生活随笔為你收集整理的mysql 返回随机行_从mysql数据库返回随机行而不使用rand()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql慕课网笔记_mysql学习笔记
- 下一篇: koa2 session mysql_k