|
СКД наборы данных vs левое соединение | ☑ | ||
---|---|---|---|---|
0
Tonik992
24.08.18
✎
15:41
|
Вот ведем спор с коллегой по поводу того, что если в запросе используется большое количество левых соединений (есть основная таблица, и к ней присоединяются левым соединением по некоторым полям другие таблицы), то по его мнению нужно запрос раскидывать на множество наборов данных и соединение делать через "Связи наборов данных" - это удобно! Именно удобно.
Я же как-то не сторонник из-за слова удобства перекочевывать на наборы данных вместо левого соединения.. Но и нет весомых доводов сказать, что 5-10 наборов данных хуже чем левое соединение.. Какие аргументы (какие показатели сравнения) могут быть ЗА наборы данных или ЗА левое соединение? |
|||
1
polosov
24.08.18
✎
15:43
|
Это религиозный вопрос.
|
|||
2
Вафель
24.08.18
✎
15:45
|
мс скл может индекс подходящий использовать.1с уж не может
|
|||
3
Tonik992
24.08.18
✎
15:46
|
(1) Когда две религии конфликтуют между собой, побеждает сильнейшая?
|
|||
4
МихаилМ
24.08.18
✎
15:47
|
быстрее запросом при условии , что наборы данных хранятся в субд. иначе (тз)- скд.
|
|||
5
Tonik992
24.08.18
✎
15:48
|
(2) При простом связывании наборов данных (без применения параметров), СКД получает все данные из БД за одно обращение?
|
|||
6
d4rkmesa
24.08.18
✎
15:48
|
(0) Ну попробуйте соединить строки левым соединением, чтобы в одну ячейку вывелось в отчете. Все зависит от задачи, главное понимать как оно работает.
|
|||
7
polosov
24.08.18
✎
15:49
|
(3) Побеждает наука.
Делаешь и так и так. Смотришь планы, получившихся запросов в скуле. Если нет разницы, то ничья. Но т.к. везде левые соединения, то скорее всего ничья. |
|||
8
polosov
24.08.18
✎
15:50
|
(6) Выбор когда ... тогда ... иначе ... конец
|
|||
9
Tonik992
24.08.18
✎
15:52
|
(6) Та оно-то понятно, что при связи наборов данных вывод может быть разный..
Я подразумеваю, что задача одна и она может быть достигнута как простым левым соединением одним запросом в СКД, либо же путем соединения нескольких наборов данных. И вывод при этом будет идентичный в обоих случаях. |
|||
10
MrStomak
24.08.18
✎
15:53
|
(7) Как может не быть разницы, если в случае наборов данных будет минимум 2 запроса, а при левом соединении - 1?
|
|||
11
Tonik992
24.08.18
✎
15:53
|
(4) Важное условие спора: все на СКД.
Только в 1 случае делается в одном наборе всё левым соединением. Во втором случае соединение путем связи наборов. |
|||
12
Tonik992
24.08.18
✎
15:54
|
(10) А есть инфа подробная об этом? Опытным путем анализировали план запросов? Я просто этого не делал. Но тоже есть предположение, что при левом соединение будет 1 запрос, а при связи наборов - несколько..
|
|||
13
Вафель
24.08.18
✎
16:42
|
вроде как скд делает соединение наборов у себя на серере, а не на сервере скл.
Но может быть теперь уже не так |
|||
14
Вафель
24.08.18
✎
16:42
|
(12) запусти профайлер
|
|||
15
milan
24.08.18
✎
16:45
|
(0) Смотри сюда СКД. Связи наборов данных. ЕСТЬ NULL если хочешь иметь неожиданные результаты пользовательских отборов, используй связи наборов данных )
Я вообще связи наборов данных использую только когда надо сделать запрос в цикле, в остальных случаях соединения объединяю в группы и через компоновку указываю не обязательное соединение. |
|||
16
Tonik992
24.08.18
✎
16:53
|
(15) Спасибо, что-то было такое у меня давно..
+ с множеством наборов данных надо настраивать поля аккуратно, есть вероятность два одинаковых по смыслу поля назвать по-разному. Или наоборот, дать одинаковое название (в одном наборе не получится). |
|||
17
Franchiser
гуру
24.08.18
✎
17:13
|
Соединение в запросе быстрее.
|
|||
18
Cyberhawk
24.08.18
✎
17:17
|
Что за вымышленный коллега? Пусть в эту ветку придет и спорьте тут
|
|||
19
Tonik992
24.08.18
✎
17:23
|
(18) Это к чему?
|
|||
20
Cyberhawk
24.08.18
✎
17:30
|
(19) К первому вопросу наверное
|
|||
21
Tonik992
24.08.18
✎
17:33
|
(20) Никакой содержательности, точно не к первому.
|
|||
22
Cyberhawk
24.08.18
✎
17:35
|
Что-то ты не понял походу. Какая смысловая нагрузка от упоминания тобой какого-то коллеги?
|
|||
23
Tonik992
24.08.18
✎
17:38
|
(22) Я в (19) и спросил об этом.
Это вступление, с чего возник мой вопрос. Спор закончили, теперь уже самому хочется разобраться, стало интересно |
|||
24
MrStomak
24.08.18
✎
17:40
|
(12) Это очевидно следует из архитектуры СКД:
1) В настройках соединения ты задаёшь не только связи, но ещё параметры, когда поле из одного запроса передаётся в качестве параметра другого запроса. Поэтому там возможны всякие выверты типа остатков на каждый день или срезов последних на каждый день, которые в запросе тета-соединениями получаются. 2) В макете компоновки данных, когда ты видишь "действительные" запросы, которые СКД шлёт - они тоже не соединены никак и лежат разными запросами. 3) Ты можешь спокойно соединять таблицы разных СУБД, полученные запросами к внешним источникам данных через связи наборов, но не можешь делать это в запросе (что вполне логично - ведь это разные СУБД!) Всё это свидетельствует однозначно о том, что работа с наборами происходит в контексте сервера приложений 1С, а не конкретной СУБД. |
|||
25
Cyberhawk
24.08.18
✎
17:41
|
Ну ты же не пишешь, как ты первый раз встретился со своим коллегой, или как он устроился к тебе на работу (или ты к нему). В этой теме в чем прикол про коллегу писать?
|
|||
26
Tonik992
24.08.18
✎
17:42
|
(25) Да, можно опустить.
Считаешь это лишней информацией? |
|||
27
Cyberhawk
24.08.18
✎
17:50
|
Конечно, ведь от истории возникновения вопроса его суть (и ответ) не меняются?
И за тобой вроде такое не в первый раз замечено. И это еще не понабежали любители анекдота про "своего друга" ) |
|||
28
Tonik992
24.08.18
✎
18:08
|
(24) Очень сильный ответ!
(27) Наверное не меняется. Возьму на заметку |
|||
29
bolder
24.08.18
✎
20:16
|
Мелко плаваете в СКД...
|
|||
30
Tonik992
25.08.18
✎
14:27
|
(29) Поделитесь-ка, что там в глубоководье?
|
|||
31
kittystark
25.08.18
✎
15:42
|
по мне так старая добрая консоль запросов - для отладки самое то, следовательно я за один набор данных, по возможности (всякие там собственные иерархии не в счет)
плюс опять таки в одном наборе можно использовать выбрать ... поместить ВТ1 индексировать по ПолеСвязи; выбрать ... поместить ВТ2 индексировать по ПолеСвязи; выбрать ... ВТ1 левое соединение ВТ2 по ВТ1.ПолеСвязи = ВТ2.ПолеСвзяи; с точки зрения оптимизации выполнения запроса такая индексация рекомендуется что там происходит под капотом с индексацией при связи двух наборов - ХЗ как сделать, пусть и не производительное, тета-соединение двух отдельных наборов я не знаю, в одном - пожалуйста контраргумент: правда у Хрусталевой в самом начале приводится пример, почему лучше использовать 2 набора данных вместо одного с левым соединением... но вот только на практике ни разу не удавалось написать отчет с задвоенными данными |
|||
32
xXeNoNx
26.08.18
✎
09:00
|
(0) запустите с коллегой профайлер и сами все увидите
|
|||
33
Tonik992
27.08.18
✎
09:43
|
(31) Благодарю за раскрытие.
По прикладному смыслу использование двух наборов вместо одного для избежания задвоенных данных: Вы попробуйте сделать левое соединение таким образом, чтобы для каких-нибудь строк левой таблицы было сопоставление нескольким строкам из правой. И то же самое сделайте установкой связи двух наборов. При связи наборов в группировке отчета по полю основного набора, данные "не задвоятся" (несмотря на то, что одной строке основного набора установилась связь нескольким строкам дочернего набора). А при левом соединении данные "задвоятся". |
|||
34
Cyberhawk
27.08.18
✎
09:45
|
(33) А какая строка (из "задвоенных") попадает в отчет?
|
|||
35
Tonik992
27.08.18
✎
09:51
|
(34) Если ресурсом будет выражение, которое вычисляется по полю левой таблицы, тогда этот ресурс и "задвоится" при группировке по полю левой таблицы.
|
|||
36
Cyberhawk
27.08.18
✎
09:59
|
Так ты пишешь что в СКД не задвоятся данные, а в запросе задвоятся
|
|||
37
Tonik992
27.08.18
✎
10:00
|
В контексте моего сообщения термин "задвоется" зависит от решаемой задачи.
Если в основной таблице остатки, а в другой неких другие характеристики, то при обычном левом соединении двух этих таблиц с последующим использованием ресурса Сумма(ОстатокНаНачало), результат может дать многократно увеличенное значение, что некорретно. При связи же наборов такого не произойдет. |
|||
38
Tonik992
27.08.18
✎
10:00
|
Все это относится к СКД. (36)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |