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 ответов

17 просмотров

Его не ускорять, его переписывать надо, 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
Показали бы всё это снова, в таком случае. > взят...

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

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

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

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
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта