|
множественный фильтр среза последних или условие соединения, что лучше? | ☑ | ||
---|---|---|---|---|
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |