從表中隨機取出n條記錄的最優算法,數據量越大,效率越高。

SELECT userid
FROM user
WHERE userename =0
ORDER BY rand( ) 
LIMIT 30 
從user表裏面隨機的取出30個ID 這個sql怎麼優化 數據庫是mysql.
這個表數據量很大 執行要9秒...
foolbirdflyfirst(龍騰虎躍)的答案:

正好,之前有看到個order by rand()的優化,老外說即使innodb引擎都有10倍提升,我測試了下,數據越多,確實有更多提升,但是10倍提升還沒測出來。你數據量大可以再幫我測試下

SELECT i.userid FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 30
FROM users
) vars STRAIGHT_JOIN(
SELECT r.*,
@lim := @lim - 1
FROM users r
WHERE (@cnt := @cnt - 1)
AND RAND() < @lim / @cnt
) i
只取userid,可以再改改
SELECT i.userid FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 30
FROM users
) vars STRAIGHT_JOIN(
SELECT r.userid,
@lim := @lim - 1
FROM users r
WHERE (@cnt := @cnt - 1)
AND RAND() < @lim / @cnt
) i

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章