Как выбрать случайную запись из таблицы в Mysql?
SELECT id FROM files **ORDER BY rand()** LIMIT 1;
Но такие запросы работают очень медленно. Посмотрим на EXPLAIN:
**EXPLAIN** SELECT id FROM files ORDER BY rand() LIMIT 1;
Увидим, что Mysql создает временную таблицу и использует сортировку всех данных. Такой запрос будет работать все медленнее при наполнении таблицы:
+----+-----+------+----------------------------------------------+ | id | ... | rows | Extra | +----+-----+------+----------------------------------------------+ | 1 | ... | ***4921 | Using index; Using temporary; Using filesort*** | +----+-----+------+----------------------------------------------+
Правильным решением будет использование индекса и избавление от ORDER BY RAND(). Для этого нужно:
Если перевести все в запрос:
SELECT f.id FROM files f
JOIN ( SELECT RAND() * (SELECT MAX(id) FROM files) AS max_id ) AS m
WHERE f.id >= m.max_id
ORDER BY f.id ASC
LIMIT 1;
## Эффективная замена ORDER BY RAND()
Скорость такого запроса будет в несколько раз быстрее, чем оригинального:
mysql> SELECT id FROM files ORDER BY rand() LIMIT 1; +-------+ | id | +-------+ | 72643 | +-------+ ***1 row in set (0.17 sec)***
Ускоренная версия:
mysql> SELECT f.id FROM files f JOIN ( SELECT rand() * (SELECT max(id) from files) AS max_id ) AS m WHERE f.id >= m.max_id ORDER BY f.id ASC LIMIT 1; +-------+ | id | +-------+ | 86949 | +-------+ **1 row in set (0.00 sec)**
Теперь работает быстро и не зависит от размера таблицы.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…