172 похожих чатов

Подскажите пожалуйста. Есть запрос по основной таблице task (~2.5 млн

записей) следующего вида:
explain (ANALYZE, BUFFERS) SELECT ......

FROM .... Набор джойнов по справочникам...

WHERE ... Фильтры по справочникам...

ORDER BY shema.task.deadline_time, shema.task.created_at

LIMIT 30

Проблема в том, что запрос отрабатывает 3 секунды и очень дорого стоит.
Специально для запроса создан двойной индекс по полям, которым идёт сортировка

CREATE INDEX deadline_time_created_at_idx ON shema.task USING btree (deadline_time, created_at)

Но планировщик строит запрос какими-то окольными путями. При этом если добавить к сортировке дески:
ORDER BY
shema.task.deadline_time DESC, shema.task.created_at DESC
То запрос начинает отрабатывать как надо за 2-3 миллисекунды пробегая по индексу (!причём в обратном порядке! Тк по умолчанию индекс создан asc) ~ 400 строк и набирая по условиям первые встретившиеся необходимые 30 полей.
А если DESC из ордер бай убрать, то индекс задействуется в каком-то там фулл скане и работа идёт со всей таблой попавшей под условия и там вообще страх и ужас я даже не вникал глубоко. Хотя по идее тут даже не обратное а прямое сканирование первых удовлетворяющих условиям строк должно быть. Есть идеи, почему такой парадокс?

9 ответов

25 просмотров

Скорее всего у вас where по этим же ролям, и оно сочетается с desc, но не с asc

Zakhary- Автор вопроса

По полям, которым сортируется запрос, нету ни условий ни джойнов. Нигде кроме сортировки они не всплывают. Ну только в самой выборке экземпляра уже

Zakhary
По полям, которым сортируется запрос, нету ни усло...

Попробуйте для таблиц увеличить объём собираемой статистики

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

Zakhary- Автор вопроса
Konstantin Zaitsev
Попробуйте выборку увеличить временно, сделать ана...

Спасибо, завтра попробую. Но вообще по идее если он совсем наглухо не выключен, то не должно быть такого. Проблемный запрос существует уже давно, явно были аналайзы за это время. А структура наполнения таблицы принципиально не менялась

Zakhary
Спасибо, завтра попробую. Но вообще по идее если о...

Да понятно, и на order by не должно конечно влиять, просто для больших таблиц значение целевых строк статистики достаточно маленькое

Zakhary- Автор вопроса

Докидываю фактуру. Запросы, планы и версия в txt Полную выгрузку по всем таблицам прислать к сожалению не могу. Сделал выгрузку по столбцам сортировки в файлике -d @tzirechnoy

Zakhary- Автор вопроса

Честно говоря уже раз 7 перечитал, но не пойму. Объясните пожалуйста. - сортировка по индексу ведь необходима? В случае деск он не читает всю таблицу, потому что уверен что индекс отсортирован, и начиная с его конца, он берёт самые крайние значения Дедлайн+креатед? -почему моё понимание сортировки обратно реальному?

Zakhary
Честно говоря уже раз 7 перечитал, но не пойму. Об...

А про понимание сортировки индэкса — потому, что в индэксе на дату, отсортированном по asc, в начале будут самые ранние значения, а не самые последние. Но тут это вообще неважно — хоть так хоть так, скорость заметно не изменится.

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта