mitaichik
@mitaichik

Как можно оптимизировать SQL запрос?

Всем привет. Есть запрос:
SELECT * FROM BusRoute WHERE busNumber="15А" AND date <= "2015-05-12" ORDER BY date DESC LIMIT 1

Он довольно долгий, из-за ORDER. Можно его как-то оптимизировать?

Если подробнее: Есть таблица BusRoute(busNumber, date, route). Ключ - busNumber, date

Нужно выбрать маршрут за указанную дату, или ближайшую меньшую.

Вот EXPLAIN:
349220d4742b473f9e0a1a9fe41b4d6b.png

Заранее спасибо.
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
Fadmin
@Fadmin
У вас индекс на date - asc, а нужно desc.
Либо этот исправить, либо новый навесить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sofcase
@sofcase
Веб-разработчик
Сколько примерно записей в таблице?
Сколько записей с уникальным basNumber?
Сколько записей с уникальным date?
Опубликуйте результат explain запроса.
Если запрос возвращает не так много записей, их можно отсортировать в коде и выбрать нужный.
Ответ написан
Комментировать
Попробуй (проверял в postgresql):

select * from busroute where date = (select max(a.date) from (select date from busroute where busnumber='15A' and date <= '2015-05-12') a);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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