Когда встает задача выбора слечайных элементов из таблиц, в первую очередь на ум приходит запрос вида:
SELECT * FROM tTable ORDER BY RAND() LIMIT 10;
Но давайте посмотрим, а что происходит при выполнении данного запроса?
Вот примерный ход действий:
Все бы ничего, если бы таблица имела 10-100 строк, ну на крайний случай 1000. А представим, что в таблицу попадает больше ста тысяч строк или еще хуже пара миллионов... Правильно СЕРВЕР ЛЯЖЕТ:)
Поэтому в первую очередь следует подумать "А нам точно нужна случайность?". Если ответ положительный, а табличка не очень большая, то сойдет и этот вариант запрос. В случае же огромных таблиц, стоит задуматься об альтернативных вариантах выборки. Инача время выполнения запрося будет постоянно расти.
Вариантов реализации очень много. Например, например пожно просто сгенерироварь несколько уникальных идентификаторов и вделать выборку с конструкцией IN. Универсального решения в этом случае нет...
Комментарии