Как оптимизировать sql-запрос с выборкой по дате?

Добрый день.

Имеется таблица posts, в которой 24 различных поля. В эту таблицу развлечения ради была добавлена пара сотен тысяч записей и исследуется её поведение на сайте.
ID post_date...karma
12013-10-25 12:53:54...5
............
2100002014-10-25 12:53:54...2

Поля ID и post_date (формат datetime) проиндексированы. Требуется выбрать последние пять записей (то есть с сортировкой по дате).

К сожалению, простейший запрос вроде
SELECT ID FROM posts ORDER post_date DESC LIMIT 0, 5

SELECT ID FROM posts WHERE post_date BETWEEN ... AND ... ORDER post_date DESC LIMIT 0, 5

начинает забирать на себя более 0.1с времени, а при увеличении количества записей оно будет лишь расти. Причем на время обработки не влияет наличие индекса на post_date.

Вопрос в следующем: есть ли какой-либо способ (вроде добавления особенного индекса) в данной ситуации, помимо уменьшения выборки с помощью поля ID, который позволит избежать полного перебора строк в таблице?
  • Вопрос задан
  • 2983 просмотра
Решения вопроса 1
@IceJOKER
Web/Android developer
выполняйте запросы с префиксом explain
EXPLAIN SELECT ID FROM posts WHERE post_date BETWEEN ... AND ... ORDER post_date DESC LIMIT 0, 5

тогда увидите где нужны индексы и т.д.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BuriK666
@BuriK666
Компьютерный псих
Если ID у Вас auto_increment, сортируйте по ID.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы