Имя: Пароль:
1C
1С v8
Помогите оптимизировать запрос
0 mariakw
 
27.02.18
19:35
Добый день.

Помогите, пожалуйста, оптимизировать запрос.  
Задача стоит такая: нужно получить остатки по товарам и материалам
из регистра ОстаткиТоваров.

Сам запрос: "ВЫБРАТЬ
    регОстатки.Номенклатура КАК Номенклатура,
    регОстатки.Характеристика КАК Характеристика,
    регОстатки.Склад КАК Склад,
    регОстатки.КоличествоОстаток КАК Остаток
ИЗ
    РегистрНакопления.ОстаткиТоваров.Остатки(
            ДАТАВРЕМЯ(2015, 1, 10),
            Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар)
                ИЛИ Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Материал)) КАК регОстатки".

Заранее спасибо!
1 Волшебник
 
27.02.18
19:41
У тебя дата неправильная. Сейчас 2018 год
2 mariakw
 
27.02.18
19:43
(1) Да понятно,  задание учебное.
3 iITmenedger
 
27.02.18
21:03
(0)можно оптимизировать. Вместо ИЛИ в условии виртуальной таблицы остатков использовать Объединение двух запросов
4 VitShvets
 
27.02.18
21:16
(0) Я бы попробовал условие по виду номенклатуры для виртуальной таблицы вытащить в пакетный запрос:
1. Выборка в ВТ_ТМЦ из справочника номенклатуры элементов с видами товар и материал. Дополнительно можно попробовать (3), хотя я не думаю что получится большая разница. Можно попробовать повесить индекс на ссылку. Надо пробовать и измерять время.
2. Указанный запрос, только условие по номенклатуре:
Номенклатура В (ВЫБРАТЬ ВТ_ТМЦ.Ссылка ИЗ ВТ_ТМЦ)
5 Волшебник
 
27.02.18
21:51
(2) Покажите результат замера производительности. Расскажите про объём базы. До каких пор вы хотите оптимизировать запрос? Бюджет всей этой работы?
6 Dzenn
 
гуру
27.02.18
22:26
Однозначно заменять ИЛИ, SQL его плохо перевариает
7 Малыш Джон
 
27.02.18
22:34
да, попробовать заменить ИЛИ на

Номенклатура.ВидНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Материал))

ну и однозначно попробовать предварительную выборку из справочника "Номенклатура" делать, а потом уже по ней условие ставить
8 Lemkus
 
27.02.18
22:49
Очень сомнительно, что вариант с заменой ИЛИ даст преимущество. Отбор будет эффективен, только по высокоселективному индексу. А в данном случае в базе наверное кроме товаров и материалов и нету ничего.
Самое лучше решение, особенно для учебного задания, проанализировать план выполнения запроса в профайлере для различных вариантов отбора.
9 H A D G E H O G s
 
27.02.18
23:38
Ничего не менять.
Все равно будет скан.
А если вынесите в Объединение - будет скан+сик(в лучшем случае).
10 Aleksandr N
 
27.02.18
23:45
(0) Возможно так:
Номенклатура.ВидНоменклатуры В (...)
Вместо ИЛИ.
Могу ошибаться конечно.
11 Armando
 
28.02.18
16:59
(10) для оптимизатора это тоже самое
12 Tatitutu
 
28.02.18
17:06
Заменить

Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар)
                ИЛИ Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Материал)

на

Не Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Образец)

Перечисление.ВидыНоменклатуры.Услуга - по логике на остатках не будет

что у тебя там еще из перечислений есть ?
Может кроте товара то и нет ничего ?
13 Armando
 
28.02.18
20:03
(12)  нихера себе оптимизация
14 nordbox
 
28.02.18
20:09
(12) Прикольно ))))
15 nordbox
 
28.02.18
20:11
+14 Услуга наверное есть
16 VitShvets
 
28.02.18
20:48
(12)  Лютый костыль. А завтра добавится значение перечисления "СферическийКонь_В_Вакууме"?