簡體   English   中英

MYSQL:rand()的查詢順序非常慢

[英]MYSQL: Query order by rand() very slow

我必須從表中選擇30個隨機記錄,除了查詢使用一秒鍾,如果許多用戶顯示內容,這會減慢mysql的速度。 這是查詢:

SELECT relationship, COUNT(id) AS number FROM FR_user_friends GROUP BY relationship ORDER BY rand() LIMIT 30

你知道如何加快這個查詢嗎? 謝謝。

如果我刪除rand(),查詢速度很快。 我們必須找到rand()的替代方案

ORDER BY RAND()使引擎為所有行生成隨機值,因此如果要從大表中選擇幾行,則會產生非常糟糕的性能。

例如,您可以在[1,最大行ID]范圍內的php中生成30個隨機值,並選擇第一行的行ID大於或等於LIMIT 1的隨機值。

您可以在如何優化MySQL的ORDER BY RAND()函數中找到只處理SQL的方法嗎? (但有些也不是微不足道的)。

RAND()函數太慢並且消耗太多CPU。 它為每一行生成一個隨機數,並選擇最小的一個,這就是為什么它如此慢。

為了加快速度,您可以在PHP中生成一個隨機數,並在LIMIT子句中使用,如下所示:

$firstClauseLimit = rand(0,20); // create an int random number between 0 to 20

"... ... LIMIT $firstClauseLimit,1"

通過這種方式,它會更快。

此查詢應該比您的查詢快得多

SELECT relationship, id 
FROM FR_user_friends fr1 
JOIN (
  SELECT CEIL(RAND() * ( SELECT MAX(id) FROM FR_user_friends )) AS id ) AS fr2 
  ON fr1.id >= fr2.id 
  LIMIT 0,30

我還建議在這里閱讀更多內容: 什么會更快?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM