我讀過,在大型數據庫上使用ORDER BY RAND()運行SQL查詢並不是一個好主意。隨機記錄Mysql PHP
因此,這是我在分解代碼時的一個鏡頭。代碼需要從數據庫中選擇10個隨機ID,然後再進行一次選擇以抓取隨機行。
$sql = "SELECT id FROM table WHERE image != ''
ORDER BY id DESC LIMIT 50;";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
foreach($row as $key => $value)
{
$array[] = $value;
}
}
$rand_keys = array_rand($array, 10);
foreach($rand_keys as $value)
{
$rand_arr[] = $array[$value];
}
$rand_list = implode("," , $rand_arr);
$sql = "SELECT image FROM table
WHERE image != ''
AND id IN ($rand_list)";
$result = mysql_query($sql);
任何建議加快或簡化?
我真的會避免rand()作爲一般習慣。我已經看到了這個只有幾十萬行的MyISAM表。 – 2009-11-05 09:31:01
來吧,現在多米尼克。 #3和#4是明顯的拼寫錯誤/被忽略的想法。我的錯。 #5非常有幫助。 #2在我心中。我在共享服務器上運行這段代碼,它使我的網站停下來(實際上與ORDER BY rand()效果相同)。這使我重新思考完全隨機的行,即。提供隨機圖像。 – rrrfusco 2009-11-17 01:21:10