Получение случайных записей из базы данных.
Главная проблема — написать запрос, который бы создавал минимальную нагрузку на базу данных. Многие для получения случайных записей используют сортировку с конструкцией RAND(), что-то типа такого:
1 |
SELECT * FROM wp_posts ORDER BY RAND() LIMIT 5 |
Здесь мы извлекаем 5 случайных записей. При небольшой таблице запрос выполняется достаточно быстро. Но если данных становится больше, то время, которое занимает запрос, начинает возврастать.
Чтобы оптимизировать запрос, можно сначала получить только id записей, а не все столбцы, а уже потом извлечь все данные строк. Это можно сделать примерно так:
1 2 3 4 |
SELECT wp_posts.* FROM (SELECT id FROM wp_posts ORDER BY RAND() LIMIT 5) AS ids JOIN wp_posts ON wp_posts.id = ids.id |
Немного статистики. Результаты теста обоих запросов на таблице из 438 записей:
1 запрос — Query took 0.0217 sec
2 запрос — Query took 0.0008 sec
Как видим, разница весьма существенная.
Категория: MySQL