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

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

Метки: 

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

Я
   vi0
 
13.01.13 - 17:09
Есть 2 запроса, где условие на выбираемые документы сделано через левое соединение и через условие В. Левое соединение работает в несколько раз быстрее.
Вопрос такой: т.к. "В" более читабельное (особенно когда есть несколько подобных условий) то как реализовать условие В чтобы оно работало оптимально?

обсуждение в тему:
http://partners.v8.1c.ru/forum/thread.jsp?id=691758


МЕДЛЕННЫЙ ЗАПРОС (несколько секунд):
ВЫБРАТЬ
        Доверенность.ДокументРасчетов КАК Док
ПОМЕСТИТЬ ДокументыРасчетов
ИЗ
        Документ.Доверенность.ДокументыРасчетов КАК Доверенность
ГДЕ
        Доверенность.Ссылка = &ДокументСсылка
        И ТИПЗНАЧЕНИЯ(Доверенность.ДокументРасчетов) = ТИП(Документ.Реализация)

;
 
ВЫБРАТЬ
        Товары.Сумма
ИЗ
        Документ.Реализация.Товары КАК Товары
ГДЕ
        Товары.Ссылка В
            (ВЫБРАТЬ
              ДокументыРасчетов.Док
            ИЗ
              ДокументыРасчетов)

БЫСТРЫЙ ЗАПРОС (доли секунды):
ВЫБРАТЬ РАЗЛИЧНЫЕ
        Доверенность.ДокументРасчетов КАК Док
ПОМЕСТИТЬ ДокументыРасчетов
ИЗ
        Документ.Доверенность.ДокументыРасчетов КАК Доверенность
ГДЕ
        Доверенность.Ссылка = &ДокументСсылка
        И ТИПЗНАЧЕНИЯ(Доверенность.ДокументРасчетов) = ТИП(Документ.Реализация)
 
;
 ВЫБРАТЬ
    Товары.Сумма
ИЗ
    ДокументыРасчетов КАК ДокументыРасчетов
ЛЕВОЕ СОЕДИНЕНИЕ Документ.Реализация.Товары КАК Товары
    ПО ДокументыРасчетов.Док = Товары.Ссылка
 
 
   eklmn
 
1 - 13.01.13 - 17:12
а что будет работать быстрее запрос в цикле (вар1) или вложеный запрос(вар2)?
   eklmn
 
2 - 13.01.13 - 17:15
"
ГДЕ
        Товары.Ссылка В
            (ВЫБРАТЬ
              ДокументыРасчетов.Док
            ИЗ
              ДокументыРасчетов ГДЕ ТОвары.Ссылка = ДокументыРасчетов.Товары.Ссылка)
"

предположения...
   vicof
 
3 - 13.01.13 - 17:36
(0) В первом случае отбираются доверенности. Затем выбираются все реализации и доверенности, и только потом на них накладывается условие.
Во втором случае выбираются доверенности, затем происходит соединение таблиц без всяких условий, т.е. "отбор" идет на уровне соединения таблиц.

Плюс кошернее вместо
ТИПЗНАЧЕНИЯ(Доверенность.ДокументРасчетов) = ТИП(Документ.Реализация)
писать
Доверенность.ДокументРасчетов ССЫЛКА Документ.Реализация
   Нуф-Нуф
 
4 - 13.01.13 - 17:38
индексация? не?
   Sammo
 
5 - 13.01.13 - 17:42
По опыту - конструкция В у меня превращалась в 2 разные конструкции в скуле, в зависимости от статистики. Левое всегда оставлялось левым.

Кстати, имхо соединение более читабельно, чем конструкция В
   vi0
 
6 - 13.01.13 - 17:48
(2) на чем основаны предположения?
   vi0
 
7 - 13.01.13 - 17:50
(3) почему считаешь, что условие накладывается потом? обычное условие же

чем кошернее?
   vi0
 
8 - 13.01.13 - 17:51
(4) не, индексация не помогает (которая для временной таблицы)
   vi0
 
9 - 13.01.13 - 17:52
(5) если условие типа В несколько то читать запрос становится сложно. для меня по крайней мере
   vi0
 
10 - 13.01.13 - 17:52
(5) в какие конструкции превращалось В ?
 
 Рекламное место пустует
   Sorm
 
11 - 13.01.13 - 17:55
(0) "В"  реализуй через временную таблицу с индексацией и джойн:) Чем больше данных в запросе - тем больше "В" будет отставать от джойна
   vi0
 
12 - 13.01.13 - 17:57
кстати, в моем конкретном реальном случае временная таблица содержала всего одну запись
   Sorm
 
13 - 13.01.13 - 17:58
У тебя запрос по источнику "В" будет выполнятся для каждой записи первичной таблицы.
   eklmn
 
14 - 13.01.13 - 18:01
(6) (13)+в (2) надо устанавливать фильтр в ручную, так мы получим подобие ЛЕВОГО СОЕДИНЕНИЯ
   vicof
 
15 - 14.01.13 - 02:59
(7) 1. Потому что сначала выберутся данные, потом будет пройдена каждая запись и сделан отбор по условию вхождения.
А во втором варианте записи отбираются прямо во время соединения.
2. Потому что оператор ССЫЛКА именно для этого предназначен.
   vi0
 
16 - 14.01.13 - 09:05
(15)  1. на чем основываешь этот вывод?
   vi0
 
17 - 14.01.13 - 09:08
(15) повторюсь, временная таблица содержит всего одну строку
   Defender aka LINN
 
18 - 14.01.13 - 09:16
(15) А для чего же тогда предназначен оператор ТИПЗНАЧЕНИЯ?
Кроме того, ТИПЗНАЧЕНИЯ не вызовет ошибки, если поле не содержит такого типа, в отличие от ссылки.
   spock
 
19 - 14.01.13 - 10:03
(0)Запросы не равнозначны так-то.
   vi0
 
20 - 14.01.13 - 16:26
(19) результат одинаковый


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