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

Всем привет. Может кто-то подсказать, как ускорить запрос, может какие-то идеи

есть или best practice?
Сам запрос: https://pastebin.com/nfVimykw

Его план исполнения на СУБД (получен с помощью EXPLAIN ANALYZE): https://explain.tensor.ru/archive/explain/984b6e797791f2879921530ba00d5b61:0:2021-04-23
СУБД Postgresql 12.5

И точно такой же запрос, но без count, а уже с данными:
Запрос: https://pastebin.com/mKA8ugwc
План: https://explain.tensor.ru/archive/explain/c96830824f38b3e04eeacff20acd8f21:0:2021-04-23

Я вижу предупреждения на explain tensor, но чет пока не догоняю как поправить, если кто-то подскажет - буду признателен.

5 ответов

19 просмотров

Его не ускорять, его переписывать надо, IMNSHO. Что вот это за ерунда? AND skuentity1_.id IN ( SELECT skuentity2_.id FROM pim.sku skuentity2_ WHERE skuentity2_.sku_super_model_id = skusupermo0_.id LIMIT 1 -- WTF? Где ORDER BY (или что это вообще должно было значить)? ) и это: WHERE skusupermo0_.id IN ( SELECT DISTINCT skusupermo5_.id ...

Кирилл-Веревкин Автор вопроса
Yaroslav Schekin
Его не ускорять, его переписывать надо, IMNSHO. Чт...

балин, походу не тот запрос скинул (это касательно первого пункта, там не должно быть LIMIT. Готовился, готовился и лопухнулся. Но подозреваю, что лучше от этого не станет (сейчас вроде правильный): https://pastebin.com/hPenbGDi Указанный в первом пункте момент изменен на: (skuentity1_.id IN (SELECT MIN(skuentity2_.id) FROM pim.sku skuentity2_ WHERE skuentity2_.sku_super_model_id=skusupermo0_.id))) Суть - взять первый идентификатор (по одной skusupermo0_ может быть много skuentity2_, а мне нужна одна, чтобы по ней одной потом запросить ее наименование. По второму пункту: Это отбор из заранее подготовленного запроса с перечнем идентификаторов для пагинации. Выглядит ужасно?

Кирилл-Веревкин Автор вопроса
Кирилл Веревкин
балин, походу не тот запрос скинул (это касательно...

возможно тяжело изъясняюсь (точнее меня тяжело понять). Попытаюсь объяснить: В WHERE skusupermo0_.id IN ( SELECT DISTINCT skusupermo5_.id ... подбираются все skusupermo5_, которые подходят под фильтры и сортировки переданного пользователем запроса (т. к. не получилось собрать один запрос для этого).

Кирилл Веревкин
балин, походу не тот запрос скинул (это касательно...

Показали бы всё это снова, в таком случае. > взять первый идентификатор А почему первый-то (ради любопытства)? > Выглядит ужасно? Да. LEFT JOIN внутри IN или EXISTS обычно совершенно излишни (т.к. они не отбрасывают никаких записей, и количество / состав множества skusupermo5_.id, по которым будет выполняться фильтрация, изменить тупо не могут). Т.е. это низкокачественный код, который стоит переписать, а не оптимизировать, опять-таки. ;(

Кирилл-Веревкин Автор вопроса
Yaroslav Schekin
Показали бы всё это снова, в таком случае. > взят...

Я подготовлю примеры ещё раз и сброшу, чтобы была целостная картина, только чуть попозже (не за компом сейчас). Заодно поразмышляю над тем, как можно упростить запрос. В любом случае огромное спасибо за комментарий.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта