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


1С:Предприятие ::

Метки: 

СКД наборы данных 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)



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