У меня нет средств для тестирования этого прямо сейчас, но это должно дать довольно равномерное распределение, и я сомневаюсь, что скорость будет проблемой. Выберите несколько случайных чисел ОДИН РАЗ в PHP и выполните простую операцию модуля, которая должна быть «достаточно случайной», чтобы упорядочить ваши строки.
Если точные цифры, которые я выбрал, не дают хороших результатов, вы, вероятно, можете выбрать те, которые будут.
$totalrows = 10;
$m = rand(31,61);
$k = randint(10,20);
$offset = rand(200,500) % $m;
$sql = ... "ORDER BY (post_id + $offset + $k*(post_id MOD 8)) MOD $m LIMIT $totalRows";
$r = mysql_query($sql) or die(mysql_error());
Если это все еще слишком медленно, вы можете попробовать добавить некоторую базовую случайность в предложение WHERE в качестве «грубого» фильтра, чтобы упорядочить не так много строк. Однако имейте в виду, что это должно быть проще, чем то, что вы делаете в ORDER BY, или вы просто будете снова выполнять те же медленные операции.
Дайте мне знать, если это работает для вас, мне любопытно, и я бы хотел сам проверить это на SQL. Дистрибутивы выглядят довольно хорошо, когда я пытаюсь сделать что-то подобное в Python для набора идентификаторов 1-20000, но это ничего не говорит мне о скорости выполнения в SQL