Вход | Регистрация



СКД наборы данных vs левое соединение

СКД наборы данных vs левое соединение
Я
   Tonik992
 
24.08.18 - 15:41
Вот ведем спор с коллегой по поводу того, что если в запросе используется большое количество левых соединений (есть основная таблица, и к ней присоединяются левым соединением по некоторым полям другие таблицы), то по его мнению нужно запрос раскидывать на множество наборов данных и соединение делать через "Связи наборов данных" - это удобно! Именно удобно.
Я же как-то не сторонник из-за слова удобства перекочевывать на наборы данных вместо левого соединения.. Но и нет весомых доводов сказать, что 5-10 наборов данных хуже чем левое соединение..
Какие аргументы (какие показатели сравнения) могут быть ЗА наборы данных или ЗА левое соединение?
 
 
   polosov
 
1 - 24.08.18 - 15:43
Это религиозный вопрос.
   Вафель
 
2 - 24.08.18 - 15:45
мс скл может индекс подходящий использовать.1с уж не может
   Tonik992
 
3 - 24.08.18 - 15:46
(1) Когда две религии конфликтуют между собой, побеждает сильнейшая?
   МихаилМ
 
4 - 24.08.18 - 15:47
быстрее запросом при условии , что наборы данных хранятся в субд. иначе (тз)- скд.
   Tonik992
 
5 - 24.08.18 - 15:48
(2) При простом связывании наборов данных (без применения параметров), СКД получает все данные из БД за одно обращение?
   d4rkmesa
 
6 - 24.08.18 - 15:48
(0) Ну попробуйте соединить строки левым соединением, чтобы в одну ячейку вывелось в отчете. Все зависит от задачи, главное понимать как оно работает.
   polosov
 
7 - 24.08.18 - 15:49
(3) Побеждает наука.
Делаешь и так и так. Смотришь планы, получившихся запросов в скуле. Если нет разницы, то ничья.
Но т.к. везде левые соединения, то скорее всего ничья.
   polosov
 
8 - 24.08.18 - 15:50
(6) Выбор когда ... тогда ... иначе ... конец
   Tonik992
 
9 - 24.08.18 - 15:52
(6) Та оно-то понятно, что при связи наборов данных вывод может быть разный..
Я подразумеваю, что задача одна и она может быть достигнута как простым левым соединением одним запросом в СКД, либо же путем соединения нескольких наборов данных. И вывод при этом будет идентичный в обоих случаях.
   MrStomak
 
10 - 24.08.18 - 15:53
(7) Как может не быть разницы, если в случае наборов данных будет минимум 2 запроса, а при левом соединении - 1?
 
 Рекламное место пустует
   Tonik992
 
11 - 24.08.18 - 15:53
(4) Важное условие спора: все на СКД.
Только в 1 случае делается в одном наборе всё левым соединением.
Во втором случае соединение путем связи наборов.
   Tonik992
 
12 - 24.08.18 - 15:54
(10) А есть инфа подробная об этом? Опытным путем анализировали план запросов? Я просто этого не делал. Но тоже есть предположение, что при левом соединение будет 1 запрос, а при связи наборов - несколько..
   Вафель
 
13 - 24.08.18 - 16:42
вроде как скд делает соединение наборов у себя на серере, а не на сервере скл.
Но может быть теперь уже не так
   Вафель
 
14 - 24.08.18 - 16:42
(12) запусти профайлер
   milan
 
15 - 24.08.18 - 16:45
(0) Смотри сюда СКД. Связи наборов данных. ЕСТЬ NULL если хочешь иметь неожиданные результаты пользовательских отборов, используй связи наборов данных )

Я вообще связи наборов данных использую только когда надо сделать запрос в цикле, в остальных случаях соединения объединяю в группы и через компоновку указываю не обязательное соединение.
   Tonik992
 
16 - 24.08.18 - 16:53
(15) Спасибо, что-то было такое у меня давно..

+ с множеством наборов данных надо настраивать поля аккуратно, есть вероятность два одинаковых по смыслу поля назвать по-разному. Или наоборот, дать одинаковое название (в одном наборе не получится).
   Franchiser
 
17 - 24.08.18 - 17:13
Соединение в запросе быстрее.
   Cyberhawk
 
18 - 24.08.18 - 17:17
Что за вымышленный коллега? Пусть в эту ветку придет и спорьте тут
   Tonik992
 
19 - 24.08.18 - 17:23
(18) Это к чему?
   Cyberhawk
 
20 - 24.08.18 - 17:30
(19) К первому вопросу наверное
   Tonik992
 
21 - 24.08.18 - 17:33
(20) Никакой содержательности, точно не к первому.
   Cyberhawk
 
22 - 24.08.18 - 17:35
Что-то ты не понял походу. Какая смысловая нагрузка от упоминания тобой какого-то коллеги?
   Tonik992
 
23 - 24.08.18 - 17:38
(22) Я в (19) и спросил об этом.
Это вступление, с чего возник мой вопрос. Спор закончили, теперь уже самому хочется разобраться, стало интересно
   MrStomak
 
24 - 24.08.18 - 17:40
(12) Это очевидно следует из архитектуры СКД:
1) В настройках соединения ты задаёшь не только связи, но ещё параметры, когда поле из одного запроса передаётся в качестве параметра другого запроса. Поэтому там возможны всякие выверты типа остатков на каждый день или срезов последних на каждый день, которые в запросе тета-соединениями получаются.
2) В макете компоновки данных, когда ты видишь "действительные" запросы, которые СКД шлёт - они тоже не соединены никак и лежат разными запросами.
3) Ты можешь спокойно соединять таблицы разных СУБД, полученные запросами к внешним источникам данных через связи наборов, но не можешь делать это в запросе (что вполне логично - ведь это разные СУБД!)

Всё это свидетельствует однозначно о том, что работа с наборами происходит в контексте сервера приложений 1С, а не конкретной СУБД.
   Cyberhawk
 
25 - 24.08.18 - 17:41
Ну ты же не пишешь, как ты первый раз встретился со своим коллегой, или как он устроился к тебе на работу (или ты к нему). В этой теме в чем прикол про коллегу писать?
   Tonik992
 
26 - 24.08.18 - 17:42
(25) Да, можно опустить.
Считаешь это лишней информацией?
   Cyberhawk
 
27 - 24.08.18 - 17:50
Конечно, ведь от истории возникновения вопроса его суть (и ответ) не меняются?
И за тобой вроде такое не в первый раз замечено. И это еще не понабежали любители анекдота про "своего друга" )
   Tonik992
 
28 - 24.08.18 - 18:08
(24) Очень сильный ответ!

(27) Наверное не меняется. Возьму на заметку
   bolder
 
29 - 24.08.18 - 20:16
Мелко плаваете в СКД...
   Tonik992
 
30 - 25.08.18 - 14:27
(29) Поделитесь-ка, что там в глубоководье?
   kittystark
 
31 - 25.08.18 - 15:42
по мне так старая добрая консоль запросов - для отладки самое то, следовательно я за один набор данных, по возможности (всякие там собственные иерархии не в счет)

плюс опять таки в одном наборе можно использовать
выбрать ... поместить ВТ1 индексировать по ПолеСвязи;
выбрать ... поместить ВТ2 индексировать по ПолеСвязи;
выбрать ... ВТ1 левое соединение ВТ2 по ВТ1.ПолеСвязи = ВТ2.ПолеСвзяи;
с точки зрения оптимизации выполнения запроса такая индексация рекомендуется

что там происходит под капотом с индексацией при связи двух наборов - ХЗ

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

контраргумент: правда у Хрусталевой в самом начале приводится пример, почему лучше использовать 2 набора данных вместо одного с левым соединением...
но вот только на практике ни разу не удавалось написать отчет с задвоенными данными
   xXeNoNx
 
32 - 26.08.18 - 09:00
(0) запустите с коллегой профайлер и сами все увидите
   Tonik992
 
33 - 27.08.18 - 09:43
(31) Благодарю за раскрытие.
По прикладному смыслу использование двух наборов вместо одного для избежания задвоенных данных:

Вы попробуйте сделать левое соединение таким образом, чтобы для каких-нибудь строк левой таблицы было сопоставление нескольким строкам из правой. И то же самое сделайте установкой связи двух наборов.
При связи наборов в группировке отчета по полю основного набора, данные "не задвоятся" (несмотря на то, что одной строке основного набора установилась связь нескольким строкам дочернего набора).
А при левом соединении данные "задвоятся".
 
 
   Cyberhawk
 
34 - 27.08.18 - 09:45
(33) А какая строка (из "задвоенных") попадает в отчет?
   Tonik992
 
35 - 27.08.18 - 09:51
(34) Если ресурсом будет выражение, которое вычисляется по полю левой таблицы, тогда этот ресурс и "задвоится" при группировке по полю левой таблицы.
   Cyberhawk
 
36 - 27.08.18 - 09:59
Так ты пишешь что в СКД не задвоятся данные, а в запросе задвоятся
   Tonik992
 
37 - 27.08.18 - 10:00
В контексте моего сообщения термин "задвоется" зависит от решаемой задачи.
Если в основной таблице остатки, а в другой неких другие характеристики, то при обычном левом соединении двух этих таблиц с последующим использованием ресурса Сумма(ОстатокНаНачало), результат может дать многократно увеличенное значение, что некорретно.
При связи же наборов такого не произойдет.
   Tonik992
 
38 - 27.08.18 - 10:00
Все это относится к СКД. (36)


Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует