![]() |
![]() |
![]() |
|
ВЫБОР КОГДА в параметрах виртуальной таблицы. | ☑ | ||
---|---|---|---|---|
0
SeiOkami
13.05.13
✎
15:40
|
Имею два запроса. Не могу понять почему вариант 1 выполняется более чем в два раза быстрее второго. Неужели во втором запросе проблема в сравнении с параметром (он передается "Организация")?
Первый запрос: ВЫБРАТЬ РАЗЛИЧНЫЕ БухгалтерскийОбороты.Регистратор Документ, БухгалтерскийОбороты.Организация ОрганизацияВДокументе, БухгалтерскийОбороты.Субконто1 Подразделение, БухгалтерскийОбороты.Субконто1.Владелец КАК ОрганизацияПодразделения ИЗ РегистрБухгалтерии.Бухгалтерский.Обороты(&НачПериод,&КонПериода, Регистратор, Счет В ИЕРАРХИИ (&Cчет44,&Счет91_02), , ) КАК БухгалтерскийОбороты ГДЕ БухгалтерскийОбороты.Организация <> БухгалтерскийОбороты.Субконто1.Владелец И (БухгалтерскийОбороты.Субконто1 Ссылка Справочник.ПодразделенияОрганизаций) Второй запрос (параметр = "Организация"): ВЫБРАТЬ БухгалтерскийОбороты.Регистратор Документ, БухгалтерскийОбороты.Организация ОрганизацияВДокументе, БухгалтерскийОбороты.Субконто1 Подразделение, БухгалтерскийОбороты.Субконто1.Владелец КАК ОрганизацияПодразделения ИЗ РегистрБухгалтерии.Бухгалтерский.Обороты( &НачалоПериода, &КонецПериода, Регистратор, Счет В ИЕРАРХИИ (&Cчет44, &Счет91_02), , ВЫБОР КОГДА &ОбъектСравнения = "Организации" ТОГДА ВЫБОР КОГДА Субконто1 ССЫЛКА Справочник.ПодразделенияОрганизаций ТОГДА Организация <> Субконто1.Владелец КОНЕЦ ИНАЧЕ Субконто3.Владелец <> Субконто2 КОНЕЦ, , ) КАК БухгалтерскийОбороты |
|||
1
SeiOkami
13.05.13
✎
15:42
|
пардон, &ОбъектСравнения передается "Организации"
|
|||
2
1Сергей
13.05.13
✎
15:43
|
Владелец субконто? не удивительно
|
|||
3
SeiOkami
13.05.13
✎
15:44
|
(2)
и в первом и во втором запросе одни и те же условия. но скорость первого в два раза быстрее |
|||
4
SeiOkami
13.05.13
✎
15:45
|
когда избавляюсь от ВЫБОР КОГДА (оставляю только условия первого ТОГДА), то скорость сокращается в двое. В чем фишка?
|
|||
5
Maxus43
13.05.13
✎
15:45
|
используй параметр ВидыСубконто в вирт таблице лучше.
(3) разные, субконто3 вобще не задействовано в 1-м |
|||
6
Maxus43
13.05.13
✎
15:46
|
(4) план запроса смотри, видимо превращает в кашу его твой выбор когда
|
|||
7
SeiOkami
13.05.13
✎
15:47
|
(5), но ведь по логике запроса сравнение "Субконто3.Владелец <> Субконто2" вообще не должно выполнятся
|
|||
8
1Сергей
13.05.13
✎
15:47
|
(4) или джойнить каждую строчку оборота регистра, или выбрать все строки регистра, а потом фильтрануть по джойну. Есть разница?
|
|||
9
Широкий
13.05.13
✎
15:48
|
(4) При конструкции "Выбор" скуль вроде как построчный перебор включает.
Я давно эту тему копал. Вроде как даже это индекс юзать не будет: "Выбор Когда ИСТИНА Тогда Организация=&Организация Конец" |
|||
10
SeiOkami
13.05.13
✎
15:49
|
(8), то бишь предпочтительнее поместить мое условие в ГДЕ?
я пробовал. так действительно быстрее. но почему? |
|||
11
Maxus43
13.05.13
✎
15:51
|
(10) да условия у тебя разные совершенно, перенеси то что в ГДЕ в условия один в один и посмотри разницу, без всяких выбор когда
|
|||
12
SeiOkami
13.05.13
✎
15:52
|
(11), в первом запросе?
|
|||
13
SeiOkami
13.05.13
✎
15:53
|
Я не пойму в чем разница условий. если параметр будет равен "Организации", то и заходить в "отличающееся" условие не должно
|
|||
14
Maxus43
13.05.13
✎
15:53
|
твоё условие лучше переделать впринципе, о чем уже говорил...
ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(, , , , &ВидСубконтоПодразделенияОрганизации, Субконто1.Владелец = &Организация, , ) КАК ХозрасчетныйОбороты |
|||
15
SeiOkami
13.05.13
✎
15:54
|
(9), то бишь выбор когда тормозит выборку из виртуальных?
|
|||
16
Maxus43
13.05.13
✎
15:54
|
(13) должно не должно - этого платформа не знает, а план запроса делает так, как будто зайдёт вовсюда, тоесть в запросе другие таблицы присутсвуют
|
|||
17
Maxus43
13.05.13
✎
15:55
|
(15) нельзя так категорично утверждать, но возможно.
например ИЛИ тоже тормозит работу, с ним индексы перестают использоваться |
|||
18
Ksandr
13.05.13
✎
15:55
|
ВЫРАЗИТЬ(Субконто1 КАК нибудь).Владелец
|
|||
19
SeiOkami
13.05.13
✎
15:56
|
дело в том, что запросом номер 2 я пытаюсь объединить два запроса, разница в которых лишь условие, чтобы поместить в СКД
один запрос имеет условие: Организация <> Субконто1.Владелец второй условие: Субконто3.Владелец <> Субконто2 Не могу понять как реализовать это иначе =( |
|||
20
SeiOkami
13.05.13
✎
15:57
|
(14), то бишь передавать вид субконто? сейчас сделаю. но как быть с (19)
|
|||
21
Maxus43
13.05.13
✎
15:58
|
(20) если передашь вид субконто, то у тебя будет только Субконто1, причем правильного типа
|
|||
22
SeiOkami
13.05.13
✎
16:01
|
(21), но ведь таким макаром я вырублю условие Субконто3.Владелец <> Субконто2, которое использует два субконто.
И все равно мне придется делать ВЫБОР КОГДА |
|||
23
viktor_vv
13.05.13
✎
16:05
|
(22) А субконто3 какого типа ? Поди тоже подразделение ?
|
|||
24
SeiOkami
13.05.13
✎
16:07
|
(23), неа - другой справочник
|
|||
25
SeiOkami
13.05.13
✎
16:08
|
просто такая простая задачка, а какой-то пресловутый ВЫБОР КОГДА все портит
|
|||
26
viktor_vv
13.05.13
✎
16:11
|
(25) Присоединюсь к (9), из-за Выбор индексы не используются.
|
|||
27
Maxus43
13.05.13
✎
16:15
|
(25) передай 2 вида субконто
|
|||
28
SeiOkami
13.05.13
✎
16:30
|
Спасибо, задачу решил просто передавая три вида субконто, которые используются в запросе.
хотя до сих пор меня смущает странная логика наложения условия при ВЫБОР КОГДА... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |