Я читал, что не стоит запускать SQL-запросы с ORDER BY RAND() в больших базах данных.Случайные записи Mysql PHP
Итак, вот мой снимок при разрыве кода. Код должен выбрать 10 случайных идентификаторов из базы данных, затем сделать второй выбор, чтобы захватить случайные строки.
$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 заняли всего несколько сотен тысяч строк. –
Давай теперь Доминик. # 3 и # 4 - очевидные ошибки опечатки/забытые идеи. Виноват. # 5 было очень полезно. # 2 на мой взгляд. Я запускаю этот код на общем сервере, и он остановил мой сайт (тот же эффект с ORDER BY rand()). Это заставило меня полностью переосмыслить случайные строки, т.е. слушая случайные изображения. – rrrfusco