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

Дилема. Есть главная таблица и завищясие от нее 15, из

кауждой нужно вытащить все данные по внешнему ключу из главной таблицы. Т е на одну строку из главной таблицы нажно залезть во все зависимые и найти все имеющиеся данные по внешнему ключу. Проблема в том, что когда в главной таблице 170_000 записей, то все происходит не быстро. На данный момент приложение обращается к каждой зависимой таблице отдельным запросом на выборку. Это, конечно медленнее, чем одним запросом. Однако, если выбирать все одним запросом черз join, то база вернет кучу лишних данных из-за дубликатов выборки, что тоже может повлиять на производительность. Так вот какой вариант лучше выбрать мне? Возможно есть способы заставить базу не дублировать данные при выборке через join?

34 ответов

30 просмотров

сделать все те запросы, что делаются отдельно, в один запрос переписать.

Владимир
сделать все те запросы, что делаются отдельно, в о...

Не факт. Иногда много мелких запросов лучше одного медленного. Всё по ситуации

Замени джоины на apply, это поможет тебе от дублей избавиться, там уже сам решай как тебе надо или distinct или top 1 какой-нибудь. А вообще надо тестировать и сравнить результаты, ну и планы смотреть.

нет, почему это неизбежно?

NIX- Автор вопроса
Владимир
нет, почему это неизбежно?

SELECT A.name, B.car_number FROM A JOIN B ON A.id=B.parent_id В таблице B на каждый внешний ключ по 30 записей, а это значит, что в выходной таблице будет в первом столбце 30 раз одно и тоже имя

NIX
SELECT A.name, B.car_number FROM A JOIN B ON A.id=...

для этого есть cross apply и outer apply

NIX- Автор вопроса
Владимир
для этого есть cross apply и outer apply

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

NIX
Ну мне по сути нужно вернуть одну запись на группу...

вы там можете сделать чего пожелаете, хоть 1, хоть 10

NIX- Автор вопроса
Владимир
вы там можете сделать чего пожелаете, хоть 1, хоть...

Потери значений из зависимой таблицы не будет?

NIX- Автор вопроса
Владимир
как захотите так и будет

Ладно, ознакомлюсь, спасибо)

NIX- Автор вопроса
NIX- Автор вопроса
Владимир
для этого есть cross apply и outer apply

Я не совсем понял, как мне может помочь apply из его описания и примеров. Возможно я неясно изъясняюсь, и что бы быть более точным выложу типичную таблицу с дублями после join. Красным выделены дублирующие надписи, которые придут с сервера в мое приложение, а мне бы хотелось, что бы приходило одно имя, все подразделения в единичном названии и все номера. На всякий случай прикреплю денормализованный агрегат в формате json: [ { "person_name": "John", "departments": [ { "department_name": "Finance", "phone_number": ["023451", "99478", "67890"] }, { "department_name": "Marketing", "phone_number": ["023451", "99478", "67890"] } ] }, { "person_name": "Barbara", "departments": [ { "department_name": "Finance", "phone_number": [""] } ] }, { "person_name": "Michelle", "departments": [ { "department_name": "", "phone_number": ["005634"] } ] } ]

NIX
screenshot Я не совсем понял, как мне может помочь apply из е...

https://dba.stackexchange.com/questions/173831/convert-right-side-of-join-of-many-to-many-into-array

NIX- Автор вопроса
Pshemko Bzdeshko
https://dba.stackexchange.com/questions/173831/con...

Вот, это похоже на решение моей проблемы, надо только посмотреть, что выводит)

NIX
screenshot Я не совсем понял, как мне может помочь apply из е...

телепатов здесь нет, про json вы не говорили. все можно сделать и через apply как я писал выше, но лучше посмотреть функционал работы с json в sql

NIX- Автор вопроса
Владимир
телепатов здесь нет, про json вы не говорили. все ...

Я уже писал, что мне не обязателен на выходе json, это лишь пример без дубликатов

NIX
Я уже писал, что мне не обязателен на выходе json,...

вы понимаете что никто полностью один стандарт sql не поддерживает на 100%, и конструкция apply в pg это LATERAL, т.е. синтаксис ВСЕ РАВНО отличается. на больших объемах маршаллинг у вас будет очень дорог вместо того, чтобы из пг или ms sql получать готовый сформированный json.

NIX- Автор вопроса
Владимир
вы понимаете что никто полностью один стандарт sql...

Эту проблему уже решили, конкретными пакетами для ef core

NIX
Эту проблему уже решили, конкретными пакетами для ...

вам еще много предстоит узнать про волшебный мир ORM.

нет, он хочет унифицированый запрос - на языке стандарт скуель, это невозможно

NIX- Автор вопроса
Андрій †162560⚰️
нет, он хочет унифицированый запрос - на языке ста...

Ну почему вы такие упрямые, при чем тут sql ,я использую orm. Ну если вы не разбираетесь в теме, то что говорить?

NIX
Ну почему вы такие упрямые, при чем тут sql ,я исп...

Так и используй возможности ОРМ раз ты не понимаешь SQL

NIX
Ну почему вы такие упрямые, при чем тут sql ,я исп...

орм по твоему твои линкю запросы во что превращает?

NIX
Ну почему вы такие упрямые, при чем тут sql ,я исп...

судя по твоим речам, тут многие работать начали до того как ты родился %) уж поверь, не в теме пока что ты, а не мы %)

NIX
Ну почему вы такие упрямые, при чем тут sql ,я исп...

когда ты тянешь context.Users.Include(u => u.Orders) это парсится в обычный лефт джойн скуель. и соответсвтенно уже твой клиент убирает так нызываемые"дубли"

NIX- Автор вопроса
Андрій †162560⚰️
орм по твоему твои линкю запросы во что превращает...

Ну так он их превращает, взависимости от базы, так при чем тут запрос на sql под все субд? Ты сам-то подусай что пишешь

NIX
Ну так он их превращает, взависимости от базы, так...

в том что в ефе не реализованы ВСЕ МЕТОДЫ ВСЕХ БАЗ парсится только то что общее, в стандарт-скуель. Все остальное на стороне клиента.

NIX
Ну так он их превращает, взависимости от базы, так...

чувак, у тебя на 170 тыщах строк уже все раком встало так что это тебе надо подумать что в твоей архитектуре не так и что ты не так в книжках прочитал %)

NIX- Автор вопроса
Андрій †162560⚰️
в том что в ефе не реализованы ВСЕ МЕТОДЫ ВСЕХ БАЗ...

Так я и хочу на этом общем найти решение, понимаешь? А тут мне рассказывают, что приложение всегда зависит от базы

NIX- Автор вопроса
Андрій †162560⚰️
когда ты тянешь context.Users.Include(u => u.Order...

Вот, этого я и хочу избежать, их можно разделить, как сделано сейчас, но это отдельные запросы

NIX- Автор вопроса
Gopneg
судя по твоим речам, тут многие работать начали до...

Да, спасибо, я уже насмотрелся на опытных говнокодеров со смешанными слоями данных, незнаем автомаппера , упаковок и встроенных через строку скл запросов на 100 строк, идите делайте боль другим

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта