Добрый день. Проблема возникла очень странная и, на мой взгляд, нелогичная.
У меня есть некая таблица 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]
Кто-нибудь сталкивался с такой проблемой или это у меня руки-крюки?