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

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

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

34 ответов

9 просмотров

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

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

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

Замени джоины на 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 строк, идите делайте боль другим

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
49
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Подскажите, есть какие-то события создания/уничтожения у TFrame по типу TForm (OnCreate и OnClose/OnDestroy) ? Как отловить создание TFrame и "перед" уничтожением. На Tframe р...
Денис
8
Карта сайта