|
Почему внутреннее соединение медленнее, чем левое | ☑ | ||
---|---|---|---|---|
0
John83
04.08.16
✎
17:07
|
Если в запросе поставить внутреннее соединение, то отрабатывает в несколько раз дольше. Почему так?
ВЫБРАТЬ РасчетыСКонтрагентамиЗаявкиОбороты.Регистратор КАК ДокументОплаты, РасчетыСКонтрагентамиЗаявкиОбороты.Организация, РасчетыСКонтрагентамиЗаявкиОбороты.Контрагент, РасчетыСКонтрагентамиЗаявкиОбороты.ДоговорКонтрагента, РасчетыСКонтрагентамиЗаявкиОбороты.Сделка, РасчетыСКонтрагентамиЗаявкиОбороты.СуммаВзаиморасчетовОборот КАК СуммаОплаты, ВЫРАЗИТЬ(РасчетыСКонтрагентамиЗаявкиОбороты.Регистратор КАК Документ.ПлатежноеПоручениеВходящее).Дата КАК ДатаОплаты, ПродажиЗаявкиОбороты.ДокументПродажи КАК ДокументПродажи, ВЫБОР КОГДА РасчетыСКонтрагентамиЗаявкиОбороты.ДоговорКонтрагента.ОсновнойМенеджер <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) ТОГДА РасчетыСКонтрагентамиЗаявкиОбороты.ДоговорКонтрагента.ОсновнойМенеджер ИНАЧЕ РасчетыСКонтрагентамиЗаявкиОбороты.Контрагент.ОсновнойМенеджерПокупателя КОНЕЦ КАК ОсновнойМенеджер, РасчетыСКонтрагентамиЗаявкиОбороты.ЗаказЗаявка ПОМЕСТИТЬ ВсеДокументыОплаты ИЗ РегистрНакопления.РасчетыСКонтрагентамиЗаявки.Обороты(, , Регистратор, ) КАК РасчетыСКонтрагентамиЗаявкиОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиЗаявки.Обороты(&ДатаНач, &ДатаКон, , ) КАК ПродажиЗаявкиОбороты ПО РасчетыСКонтрагентамиЗаявкиОбороты.Сделка = ПродажиЗаявкиОбороты.ЗаказЗаявка И РасчетыСКонтрагентамиЗаявкиОбороты.ЗаказЗаявка = ПродажиЗаявкиОбороты.ЗаказПокупателя ГДЕ РасчетыСКонтрагентамиЗаявкиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее |
|||
1
Жан Пердежон
04.08.16
✎
17:12
|
Есть такие базовые заклинания: профайлер, план запроса, обновление статистики...
|
|||
2
В тылу врага
04.08.16
✎
17:12
|
поля соединений индексированные?
|
|||
3
ptiz
04.08.16
✎
17:28
|
(0) А условие ты убираешь при внутреннем? Тогда - да, возможно.
|
|||
4
John83
04.08.16
✎
17:33
|
(3) какое условие?
|
|||
5
John83
04.08.16
✎
17:33
|
(2) нет
|
|||
6
polosov
04.08.16
✎
17:40
|
(0) Запрос с левым соединением с условием ГДЕ, всегда превращается в запрос с внутренним соединением.
|
|||
7
ovrfox
04.08.16
✎
18:15
|
(6) Ну ты загнул.
Запрос с внутренним соединением всегда можно преобразовать в левое с условием. Обратное - НЕВЕРНО. |
|||
8
Fram
04.08.16
✎
18:19
|
(6) аккуратнее надо быть с изречениями. после такого могут уволить
|
|||
9
НеБорис Нуралиев
04.08.16
✎
18:35
|
Ну тут фактически два подзапроса соединяются, возможно оптимизатор не самый оптимальный план выбирает, потому что статистики нет и взять негде.
Попробуй условие из ГДЕ в условие внутреннего соединения вставить. Возможно быстрее отработает. |
|||
10
Tateossian
04.08.16
✎
18:38
|
(0) Слышал от гуру, что с виртуальными таблицами вообще лучше не делать соединений.
|
|||
11
ptiz
04.08.16
✎
18:44
|
(4) Которое "ГДЕ".
|
|||
12
hitodom
04.08.16
✎
18:49
|
скл выбирает другой тип соединения моет быть хэш джойн и обламывается
|
|||
13
Fragster
гуру
04.08.16
✎
18:53
|
вместо РегистрНакопления.РасчетыСКонтрагентамиЗаявки.Обороты использовать РегистрНакопления.РасчетыСКонтрагентамиЗаявки, а РегистрНакопления.ПродажиЗаявки.Обороты запихать предварительно во временную таблицу
|
|||
14
Fragster
гуру
04.08.16
✎
18:53
|
ну а вообще ответ в (1)
|
|||
15
John83
05.08.16
✎
12:27
|
(10) (13) да, сам что-то забыл про такое..
|
|||
16
John83
05.08.16
✎
12:27
|
в общем запрос сделал несколько иначе
всем спасибо! |
|||
17
quest
05.08.16
✎
12:30
|
сделай Выразить для регистратора - у тебя и план упростится сразу, и от условия уйдешь
|
|||
18
b_ru
05.08.16
✎
12:54
|
(10) у тебя в слове "долбодятел" множество ошибок - получилось "гуру"
|
|||
19
Fragster
гуру
05.08.16
✎
14:08
|
(17) нет, не упростится
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |