日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 返回随机行_从mysql数据库返回随机行而不使用rand()

發布時間:2023/12/18 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。