Выборка из БД случайных строк без использования ORDER BY RAND()

Тема в разделе "Базы данных", создана пользователем verfaa, 1 фев 2014.

Модераторы: latteo
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    374
    Симпатии:
    41
    Из БД MySQL нужно сделать выборку 10 случайных строк.
    Недавно прочитал, что ORDER BY RAND() очень тормозит запрос и тяжел для БД.
    А с учетом того, что в таблице уже больше 30к записей, и ожидается сотни тысяч появилась острая необходимость избавится от ORDER BY RAND().
    Но осложняется это тем, что поле id AUTO_INCREMENT, которое хранит айди пользователей (в таблице пользователи сайта) идет не по порядку, т.к. пользователи периодически удаляются.
    В связи с этим методы, которые предлагаются в инете для таблиц, где id идут без разрывов не подходят.
    Подскажите как быть в этой ситуации, как переписать запрос, с помощью php
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.519
    Симпатии:
    1.368
  3. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    374
    Симпатии:
    41
    Есть большая таблица с 50к записей. В ней имеется поле id auto increment и по причине того, что часть записей в таблице были удалены, значения в этом поле идут не по порядку.
    Имеется задача выбирать из этой таблицы случайное поле. Задача нетривиальная и я решил по крону ежедневно создавать таблицу в которой нужные данные из исходной таблицы были бы распределены случайным образом. Т.е. ежедневно перемешивать исходную таблицу во временную. Подскажите, каким образом это лучше всего реализовать? Насколько ресурсоёмкой будет такая операция?
     
  4. akkela

    akkela Создатель

    Регистр.:
    17 дек 2014
    Сообщения:
    31
    Симпатии:
    4
    может пикнуть рандомом одно число и спросить у базы следующих/предыдущих 10?