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

Всем привет, у меня есть такой относительно дорогой запрос: SELECT c."chatId",

c."sourceType", c."sourceId", cu."userId" as "responsibleUserId", c."unanswered"
FROM "contacts" AS c
LEFT JOIN "crmUsers_amocrm_v3" AS cu
ON cu."integrationId" = '00000000-0000-0000-0000-000000000000' AND c."chatType" = cu."chatType" AND c."chatId" = cu."chatId"
WHERE c."accountId" = 91000112 AND c."unanswered" > 0 AND c."deleted" = false
GROUP BY c."chatId", c."sourceType", c."sourceId", cu."userId", c."unanswered"
Я пытаюсь понять как его можно оптимизировать через explain analyse, получаю вот такой план - https://explain.depesz.com/s/hclB.
Если честно не сильно разбираюсь в индексах и как их правильно применять, но планирую добавить вот такой индекс - CREATE INDEX contacts_account_id ON contacts (accountId) WHERE unanswered > 0 AND deleted = false, это ускорит выполнение моего запроса?

14 ответов

5 просмотров

А можно вставить план нормально не в JSON, и EXPLAIN (ANALYZE, BUFFERS)? И какая это версия PostgreSQL?

А вот это отношение поддержано индексами ? Что-то не увидел этого в плане запроса

Salih-Mamashev Автор вопроса
Salih Mamashev
Версия PostgreSQL 11.9, https://explain.depesz.com...

Я написал "не JSON". Дело в том, что Вы либо вставляете как-то криво, либо сайт вообще не читает оценки из плана (а уж читать сам JSON как-то не хочется).

Salih-Mamashev Автор вопроса
Yaroslav Schekin
Я написал "не JSON". Дело в том, что Вы либо вста...

Ну там вроде как тест можно выбрать, вы про это?

Salih Mamashev
Вроде как нет

Очень часто такое забывают, что foreign key != index, попробуйте создать индекс по полю FK

Salih Mamashev
Ну там вроде как тест можно выбрать, вы про это?

Я про то, что Вы должны сделать текстовый план и вставить его туда.

Salih-Mamashev Автор вопроса
Yaroslav Schekin
Я про то, что Вы должны сделать текстовый план и в...

Чтобы сделать текстовый план я же долже выбрать формат текст?

Salih Mamashev
Чтобы сделать текстовый план я же долже выбрать фо...

Вы должны в psql выполнить "EXPLAIN (ANALYZE, BUFFERS) SELECT ..." и вставить результат на сайт.

Salih-Mamashev Автор вопроса
Yaroslav Schekin
Вы должны в psql выполнить "EXPLAIN (ANALYZE, BUFF...

Видимо когда используеш функцию из дашборда пгадмина он так криво выдает, вот вручную запрос сделал - https://explain.depesz.com/s/JXzr

Salih Mamashev
Видимо когда используеш функцию из дашборда пгадми...

Да уж. Может, им bug report написать (такие планы практически бесполезны)? Что там с autovacuum в базе? Для crmUsers_amocrm_v3 давно выполнялся, например (может, она очень часто обновляется)? А так — тут можно попробовать два варианта, в принципе. 1. Тот, что Вы предложили: CREATE INDEX ON contacts (accountId) WHERE unanswered > 0 AND NOT deleted; 2. Или вот так: CREATE INDEX ON crmUsers_amocrm_v3(integrationId, chatType, chatId); -- Порядок полей не так уж важен для *этого* запроса Забыл написать — а что чтений так много? RAM на сервере не хватает? Или настройки "кривые"?

Salih-Mamashev Автор вопроса
Yaroslav Schekin
Да уж. Может, им bug report написать (такие планы ...

Да, crmUsers_amocrm_v3 часто обновляется, попробую с индексами. Насчет железа должно хватать, но этот вопрос надо уточнить. В любом случае спасибо за ответ. Если получу какие-то результаты, напишу)

Salih Mamashev
Да, crmUsers_amocrm_v3 часто обновляется, попробую...

> железа должно хватать, но этот вопрос надо уточнить. Но не хватает, как видно по плану. ;)

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта