Имя: Пароль:
1C
1С v8
множественный фильтр среза последних или условие соединения, что лучше?
,
0 Очкарик
 
17.01.14
18:15
Заметил, что СрезПоследних(, ресурс1 в (Выбрать ВремТаб.значения1 из ВремТаб как ВремТаб)) выполняется в два раза дольше, чем если просто написать условие соединения со срезом без указания фильтра в виде поздапроса в условиях виртуальной таблицы.

Правильно ли в случаях лучше написать условие соединения, чем указывать фильтр в виде подзапроса в условии виртуальной таблицы?
Получается, что условия виртуальной таблицы среза эффективны только в случае, когда туда передается параметр, содержащий одно значение?
1 kiruha
 
17.01.14
18:18
А причем тут ресурс ?
Он в индекс не входит, ему пофиг, если не проиндексирован
Что так что так в sql будет одно и то же
Первые элементы ставь
2 Очкарик
 
17.01.14
18:19
(1) Пардон, измерение
3 kiruha
 
17.01.14
18:20
Измерение первое ?
4 Очкарик
 
17.01.14
18:21
Вот так, поправка
СрезПоследних(, измерение1 в (Выбрать ВремТаб.значения1 из ВремТаб как ВремТаб) и  измерение2 в (Выбрать ВремТаб2.значения из ВремТаб2 как ВремТаб2)
5 Ksandr
 
17.01.14
18:21
"В" как бы намекает
6 Ksandr
 
17.01.14
18:22
(4) "В" как бэ вдвойне намекает
7 kiruha
 
17.01.14
18:24
(4)
А так пробовал
,(измерение1,измерение2) в (Выбрать различные ... из ТМП 3)
8 Очкарик
 
17.01.14
18:25
(3) Пофигу какое. Если в условие вируальной таблицы задавать условие по измерению в виде Измерение В (Выбрать п.пп из п как п), то это работает дольше, чем если написать условие соединения типа
Левое соединение регистрсведений.вася() по измерениерег = п.пп
9 х86
 
17.01.14
18:27
(0)зависит от СУБД которую ты используешь
надо смотреть план запроса

ЗЫЖ но как показывает практика условие В оптимизатор плохо отрабатывает
10 Очкарик
 
17.01.14
18:29
(9) SQL, план запроса формирует вложенный подзапрос в этом случае
11 fisher
 
17.01.14
18:30
(0) Думаю, однозначного ответа тут быть не может. Скорее всего эффективность зависит от наполнения регистра и временной таблицы.
12 kiruha
 
17.01.14
18:30
(8)
Ну смотри индексы
Период + Регистратор + НомерСтроки (Кластерный)    Всегда.

Регистратор + НомерСтроки    Всегда.

Измерение1 + [Измерение2 + ...] + Период + Регистратор + НомерСтроки    Есть хоть одно измерение регистра.
Индекс, включающий все измерения в том порядке, в котором они заданы при конфигурировании, поле Период и поле Регистратор

Соответ если задаешь ограничение на изм 2 , а не на изм 1, то в индекс не попадаешь
13 kiruha
 
17.01.14
18:31
И временные таблицы проиндексировал ?
14 fisher
 
17.01.14
18:31
Или у тебя при двух строках в виртуальной таблицы такая же фигня?
15 Очкарик
 
17.01.14
18:39
(13) Смысл индуксации временной таблицы, если в условии "В" результатом будет другая таблица?
16 mistеr
 
17.01.14
19:13
(4) И сколько там значений, для измерение1 и измерение2?
И никакой корреляции между ними?
17 hhhh
 
17.01.14
22:23
(15) да, сколько там значений во времтаб? Больше 100000 или меньше?
18 zulu_mix
 
17.01.14
22:27
>>СрезПоследних(, ресурс1 в (Выбрать ВремТаб.значения1 из ВремТаб как ВремТаб))

какая то жесть. всю задачу в студию
19 Очкарик
 
17.01.14
22:34
(18) Ваще, предыстория следущая... Пишу запрос к таблице среза. По привычке в условии соединения ставлю знак равенства. Тут на меня набрасываются и кричат, что я баран и надо отфильтровать измерение 2 и 3 в параметрах виртуальной таблицы по условию В (выбрать из временной таблицы).
Я про себя думаю, что ни муя это не правильно и начинаю эксперимент. Оказывается, условие левого соединения со срезом по знаку равенства работает минимум в два раза быстрее.
Жесть, не знаю что и делать, ведь на сертификации мне бы поставили двойку.
20 Очкарик
 
17.01.14
22:38
Шибко умных ведь никто не любит, правда ведь?
21 zulu_mix
 
17.01.14
22:42
у тебя есть ресурс. в ВТ. ну и соединяй с ним. че голову то забивать?
22 Очкарик
 
17.01.14
22:46
(21) Так и делал. Знаю, что "В(выбрать из большой таблицы)" - это полюбэ вложенный запрос. В условиях виртуальной таблицы среза последних оптимально работает только знар равенства. И если надо фиштьтрануть по многим значениям, то левое соединение со знаком равенства отработает быстрее.
Но на меня наехали и сазали, что на сертификационном экзамене за это ставят двойку....
23 hhhh
 
17.01.14
23:46
(22) вообще-то левое соединение - это вообще самое тормозное из того, что есть на этом свете.

А в каком порядке экспериментировал, сначала левое, а потом в виртуальной или наоборот? Вообще-то это важно. Первый запрос раз в 10 обычно выполняется медленнее.
24 NcSteel
 
17.01.14
23:56
(23) Не правда.
25 Очкарик
 
18.01.14
02:33
(23) два запроса.
Один выбирает срез последних с фильтрами по измерениям в виде селектов из виртуальных таблиц, далее соединение с этой же таблицей.
Работает в два раза дольше.
Второй запрос тупо срез последних с соединением по ресурсам с виртуальной таблицей.
Работает в два раза быстрее.
26 Очкарик
 
18.01.14
02:36
Подозреваю, что знак равенства в соединении работает гораздо быстрее, чем условие "В" по измерениям в параметрах виртуальной таблицы
27 Очкарик
 
18.01.14
02:52
Выбрать
Вт.Поле1,
Вт.Поле2,
Вт.Поле3,
Рег.Ресурс,
Из ВремТаб КАК Вт
ЛЕВОЕ Соединение РегистрСведений.Тест.СрезПоследних(, Измерение1 В (Выбрать Различные ВремТаб.Поле1 из ВремТаб Как ВремТаб) И Измерение2 В (Выбрать Различные ВремТаб.Поле2 из ВремТаб Как ВремТаб)) КАК Рег
По Вт.Поле1 = Рег.Измерение1 И Вт.Поле2 = Рег.Измерение2

Это работает в два раза дольше, чем когда убрать условия среза последних и оставить условия соединения.
28 Dethmont
 
18.01.14
03:00
Так у тебя сейчас и соединение и подзапрос
Если ты подзапрос вынесешь в условия соединения, то конечно работать будет быстрее... Это ежу понятно!
29 Очкарик
 
18.01.14
03:02
(28) Не всем ежам это оказывается понятно :-)
30 KAO111
 
18.01.14
10:41
(19) (22) Ну судя по последним статьям на итс, на сертификации двойку бы не поставили

http://its.1c.ru/db/metod81?db=metod81#content:5457:1