Левое соединение VS условие В #647124


#0 by vi0
Есть 2 запроса, где условие на выбираемые документы сделано через левое соединение и через условие В. Левое соединение работает в несколько раз быстрее. Вопрос такой: т.к. "В" более читабельное (особенно когда есть несколько подобных условий) то как реализовать условие В чтобы оно работало оптимально? обсуждение в тему: МЕДЛЕННЫЙ ЗАПРОС (несколько секунд): ВЫБРАТЬ        Доверенность.ДокументРасчетов КАК Док ИЗ        Документ.Доверенность.ДокументыРасчетов КАК Доверенность БЫСТРЫЙ ЗАПРОС (доли секунды):        Документ.Доверенность.ДокументыРасчетов КАК Доверенность
#1 by eklmn
а что будет работать быстрее запрос в цикле (вар1) или вложеный запрос(вар2)?
#2 by eklmn
" ГДЕ            ИЗ              ДокументыРасчетов ГДЕ ТОвары.Ссылка = ДокументыРасчетов.Товары.Ссылка) " предположения...
#3 by vicof
В первом случае отбираются доверенности. Затем выбираются все реализации и доверенности, и только потом на них накладывается условие. Во втором случае выбираются доверенности, затем происходит соединение таблиц без всяких условий, т.е. "отбор" идет на уровне соединения таблиц. Плюс кошернее вместо ТИПЗНАЧЕНИЯ(Доверенность.ДокументРасчетов) = ТИП(Документ.Реализация) писать Доверенность.ДокументРасчетов ССЫЛКА Документ.Реализация
#4 by Нуф-Нуф
индексация? не?
#5 by Sammo
По опыту - конструкция В у меня превращалась в 2 разные конструкции в скуле, в зависимости от статистики. Левое всегда оставлялось левым. Кстати, имхо соединение более читабельно, чем конструкция В
#6 by vi0
на чем основаны предположения?
#7 by vi0
почему считаешь, что условие накладывается потом? обычное условие же чем кошернее?
#8 by vi0
не, индексация не помогает (которая для временной таблицы)
#9 by vi0
если условие типа В несколько то читать запрос становится сложно. для меня по крайней мере
#10 by vi0
в какие конструкции превращалось В ?
#11 by Sorm
"В"  реализуй через временную таблицу с индексацией и джойн:) Чем больше данных в запросе - тем больше "В" будет отставать от джойна
#12 by vi0
кстати, в моем конкретном реальном случае временная таблица содержала всего одну запись
#13 by Sorm
У тебя запрос по источнику "В" будет выполнятся для каждой записи первичной таблицы.
#14 by eklmn
+в надо устанавливать фильтр в ручную, так мы получим подобие ЛЕВОГО СОЕДИНЕНИЯ
#15 by vicof
1. Потому что сначала выберутся данные, потом будет пройдена каждая запись и сделан отбор по условию вхождения. А во втором варианте записи отбираются прямо во время соединения. 2. Потому что оператор ССЫЛКА именно для этого предназначен.
#16 by vi0
1. на чем основываешь этот вывод?
#17 by vi0
повторюсь, временная таблица содержит всего одну строку
#18 by Defender aka LINN
А для чего же тогда предназначен оператор ТИПЗНАЧЕНИЯ? Кроме того, ТИПЗНАЧЕНИЯ не вызовет ошибки, если поле не содержит такого типа, в отличие от ссылки.
#19 by spock
Запросы не равнозначны так-то.
#20 by vi0
результат одинаковый
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С