|
Помогите оптимизировать запрос | ☑ | ||
---|---|---|---|---|
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) Лютый костыль. А завтра добавится значение перечисления "СферическийКонь_В_Вакууме"?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |