большим количеством JOIN (9 шт) и LEFT JOIN (5 шт). в первой же таблице есть поле с индексом. пишу такой запрос :
select t.* from view_name t where t.column = '112233'
Планировщик использует это условие в самую последнюю очередь, и шерстит все соединения которые дают 130 тыс. записей, потом по условию t.column = '112233' - оставляет 6 тыс.записей
Изначальная задумка была, что бы отрабатывало это условие и потом только для этих записей были выполнены соединения.
как можно поправить запрос вьюшки ?
https://t.me/pgsql/288632
версия 11.8 https://explain.depesz.com/s/bqjp
У меня дежавю, что ли... а, нет — https://t.me/pgsql/291308 ;) И \d+ или \sv самого view, кстати.
https://explain.depesz.com/s/um8x - вьюшка
А почему там "SELECT DISTINCT"? Я к тому, что почти всегда это намекает на ошибку в запросе, которую кто-то пытается "замести под ковёр". Т.е. если это действительно ошибка, зачем дальше разбираться (не вижу смысла оптимизировать неправильные запросы)?
по таблице meth.route_transfer, которая самая последняя по запросу возвращаются несколько записей.
И поэтому из них выбираются произвольные производные записи? Это и есть попытка "замести проблему под ковёр", нет? ;) Т.е. если возвращается несколько записей, то стоит подумать, значения из какой (или какие, если их надо группировать — максимумы/минимумы и т.п.) нужны в результате и почему.
сейчас с помощью lateral отбиру только 1 запись, уберу disitnct
Хорошо. А потом, если проблема останется — всё же, покажите всё, о чём я спрашивал (можно без \d таблиц, для начала).
https://explain.depesz.com/s/o3Ym - explain analyze запроса https://explain.depesz.com/s/fh5w - вьюшка после того как убрал distinct время выполнения лучше стало. но все равно условие сразу не ставится и тем более не по индексу, и отрабатываются все записи
(Грустно вздыхая) И в третий, кажется, раз: "Покажите версию PostgreSQL, запрос, \d каждой используемой таблицы, EXPLAIN (ANALYZE, BUFFERS)."
версия PostgreSQL 11.8 on x86_64-pc-linux-gnu https://explain.depesz.com/s/8ooc - explain analyze buffers запроса https://explain.depesz.com/s/fh5w - вьюшка до этого писали что можно без таблиц, поэтому и не делал...тем более их много же
Я подчеркнул/выделил то, что Вы несколько раз подряд не показали, вот и всё.
Обсуждают сегодня