我读过,在大型数据库上使用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