2010-08-09 115 views
2

MySQL什麼是選擇X隨機條目(而不只是一個) - 優化大量使用,即在域的主頁上。MySQL選擇隨機X條目 - 優化

據說只是盲目地使用MySQL rand()會讓這個對於大型數據庫來說非常可怕 - 請給我一個比這更好的優化答案!

回答

2

溶液是使用PHP

看看在這篇文章中選擇的解決方案編號3更快

http://akinas.com/pages/en/blog/mysql_random_row/

解決方案3 [PHP]

$offset_result = mysql_query(" SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` "); 
$offset_row = mysql_fetch_object($offset_result); 
$offset = $offset_row->offset; 
$result = mysql_query(" SELECT * FROM `table` LIMIT $offset, 1 ") 

的 解決方案4 [SQL](Second in fast)

SELECT * FROM `table` WHERE id >= (SELECT FLOOR(MAX(id) * RAND()) FROM `table`) ORDER BY id LIMIT 1; 
+0

這很快但並非真正隨機 - 只有第一個值是隨機的。 – burnall 2010-08-09 05:44:57

+0

它得到一個隨機結果,如果你想更多你可以循環它 – 2010-08-09 05:52:00

+1

嘗試第四MySQL解決方案在上面的鏈接 - 似乎隨機ish – ina 2010-08-09 07:21:33

0

我對ID有問題。該ID是自動生成的,但最小的ID相對於總記錄數非常大。所以我做了一些改動,使查詢更加隨機化,但稍微慢一點。

SELECT * FROM 'table' WHERE id >= (SELECT (FLOOR(MAX(id) * RAND()) + MIN(id)) FROM 'table') ORDER BY id LIMIT 10