Получение случайных записей из базы данных.


Главная проблема — написать запрос, который бы создавал минимальную нагрузку на базу данных. Многие для получения случайных записей используют сортировку с конструкцией 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

Оставить комментарий