@deliro

Почему сортировка по нескольким полям не использует индексы?

Добрый день. Проблема возникла очень странная и, на мой взгляд, нелогичная.
У меня есть некая таблица tbl с полями id, count и что-то ещё.
id - primary key, на count создан индекс (btree)
Так вот, мне нужно сортировать по count desc, затем по id asc. Ну и я делаю такой запрос:
select * from tbl order by count desc, id limit 10;

Это всё жутко лагает, а explain выдаёт Seq Scan.
Ну ок, пробую сортировать только по первому полю:
select * from tbl order by count desc limit 10;
Индекс используется.
Ладно, по другому полю:
select * from tbl order by id limit 10;
Индекс опять используется.

Ладно, вооружившись костылями я делаю такой запрос:
select * from (
    select * from tbl order by count desc limit 10;
) as a order by id;

Вуаля! Индекс используется! Результаты идентичные, конечно.

Но у меня Django ORM и я хочу использовать нормальную запись, а не костылить SQLом:
Entry.objects.order_by('-count', 'pk')[:10]

Кто-нибудь сталкивался с такой проблемой или это у меня руки-крюки?
  • Вопрос задан
  • 736 просмотров
Решения вопроса 1
romy4
@romy4
Exception handler
Движок может использовать только один индекс за раз. Думайте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
вот тут автор хорошо пишет
Ответ написан
Ваш ответ на вопрос

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

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