|
Оптимизация запроса с 2-ля левыми соединениями. | ☑ | ||
---|---|---|---|---|
0
tabarigen
07.02.19
✎
16:56
|
Здравствуйте друзья.
Есть запроса подбора остатков, который выполняется очень долго. Около 3-4 секунд. ВЫБРАТЬ ПЕРВЫЕ 200 Номен.Ссылка КАК Номенклатура, ТоварыНаСкладахОстатки.Характеристика КАК Серия, ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, ЦеныНоменклатурыСрезПоследних.Цена КАК Цена ИЗ Справочник.Номенклатура КАК Номен ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &РозничныйСклад) КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Розничная) КАК ЦеныНоменклатурыСрезПоследних ПО ТоварыНаСкладахОстатки.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика ПО Номен.Ссылка = ТоварыНаСкладахОстатки.Характеристика.Владелец ГДЕ Номен.НАИМЕНОВАНИЕ ПОДОБНО "%" + &СтрокаПоиска + "%" УПОРЯДОЧИТЬ ПО Остаток УБЫВ Я примерно понимаю в чем дело. Каждый раз у меня при запросе отбираются все цены которые когда либо были и все остатки. В идеале как то сделать так, чтоб цены и остатки брались только для той номенклатуры которая соответствует условию отбора Номен.НАИМЕНОВАНИЕ ПОДОБНО "%" + &СтрокаПоиска + "%" |
|||
1
tabarigen
07.02.19
✎
16:58
|
Первая мысль задать в параметрых виртуальных таблиц конструкцию вида ВидЦены = &Розничная И Характеристика ВСПИСКЕ &ТаблицаОтобранныхНоменклатур
|
|||
2
ДенисЧ
07.02.19
✎
16:58
|
Ну так сначала отбери номенклатуру в временную таблицу, потом уже её соединяй с остальным...
|
|||
3
FIXXXL
07.02.19
✎
16:59
|
(0) разбей на временные таблицы
1-товар 2 и 3 - данные по товару а потом уже соединяй |
|||
4
serg-lom89
07.02.19
✎
16:59
|
(0) разнеси по виртуальным таблицам.
а то получатся что сразу выполняется весь запрос а потом уже идет отсечение по твоему условию. |
|||
5
FIXXXL
07.02.19
✎
17:00
|
ну и ПОДОБНО - это вообще тормозная штука...
|
|||
6
FIXXXL
07.02.19
✎
17:01
|
плюс условие ГДЕ на левую таблицу надо в связи выносить
но тут не поможет... |
|||
7
tabarigen
07.02.19
✎
17:03
|
хм..
ВЫБРАТЬ ПЕРВЫЕ 200 Номен.Ссылка КАК Номенклатура, ТоварыНаСкладахОстатки.Характеристика КАК Серия, ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, ЦеныНоменклатурыСрезПоследних.Цена КАК Цена ИЗ Справочник.Номенклатура КАК Номен ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &РозничныйСклад И Характеристика.Владелец.Наименование ПОДОБНО "%" + &СтрокаПоиска + "%") КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Розничная И Характеристика.Наименование ПОДОБНО "%" + &СтрокаПоиска + "%") КАК ЦеныНоменклатурыСрезПоследних ПО (ТоварыНаСкладахОстатки.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика) ПО (Номен.Ссылка = ТоварыНаСкладахОстатки.Характеристика.Владелец) ГДЕ Номен.Наименование ПОДОБНО "%" + &СтрокаПоиска + "%" УПОРЯДОЧИТЬ ПО Остаток УБЫВ Сделал так.. Я гений?? |
|||
8
vicof
07.02.19
✎
17:03
|
Где условие по номенклатуре при соединении с ценами?
ПОДОБНО - зло |
|||
9
vicof
07.02.19
✎
17:03
|
(7) Гений с большой буквы Г
|
|||
10
tabarigen
07.02.19
✎
17:05
|
(9) да точноо... туплю под вечер
|
|||
11
tabarigen
07.02.19
✎
17:07
|
(2) разве когда я буду создавать ВременныеТаблицы они не будут содержать всех данных?
И ЛЕВОЕ СОЕДИНЕНИЕ опять таки будет по огромному регистру цены.. Но все равно щас попробую |
|||
12
ДенисЧ
07.02.19
✎
17:08
|
(11) Во временной таблице ты сам регулируешь объём данных, которые в ней хранянтся
|
|||
13
serg-lom89
07.02.19
✎
17:08
|
Выбери в первом запросе все товары тебе нужные
помести их в виртуальную. потом во втором получи остатки и их в виртуальную потом цены и их в виртуальную. а итогом запросе склей |
|||
14
tabarigen
07.02.19
✎
17:09
|
(13) ок ща сделаю
|
|||
15
tabarigen
07.02.19
✎
17:16
|
(13) ВЫБРАТЬ ПЕРВЫЕ 200
Номен.Ссылка КАК Номенклатура ПОМЕСТИТЬ ВрТовары ИЗ Справочник.Номенклатура КАК Номен ГДЕ Номен.Наименование ПОДОБНО "%" + &СтрокаПоиска + "%" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Остатки.Характеристика КАК Характеристика, Остатки.КоличествоОстаток КАК КоличествоОстаток ПОМЕСТИТЬ ВрОстатки ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, Склад = &РозничныйСклад) КАК Остатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Цены.Характеристика КАК Характеристика, Цены.Цена КАК Цена ПОМЕСТИТЬ ВрЦены ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Розничная) КАК Цены ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВрТовары.Номенклатура КАК Номенклатура, ВрОстатки.Характеристика КАК Характеристика, ВрОстатки.КоличествоОстаток КАК КоличествоОстаток, ВрЦены.Цена КАК Цена ИЗ ВрТовары КАК ВрТовары ЛЕВОЕ СОЕДИНЕНИЕ ВрОстатки КАК ВрОстатки ЛЕВОЕ СОЕДИНЕНИЕ ВрЦены КАК ВрЦены ПО (ВрОстатки.Характеристика = ВрЦены.Характеристика) ПО (ВрТовары.Номенклатура = ВрОстатки.Характеристика.Владелец) ___ Переделал прирост не такой большой.. время выполнения = 1.891с |
|||
16
Вафель
07.02.19
✎
17:18
|
Зачем вот так
ВрТовары.Номенклатура = ВрОстатки.Характеристика.Владелец |
|||
17
Вафель
07.02.19
✎
17:18
|
у регистра цен стоит галка итоги по срез послдедних?
|
|||
18
tabarigen
07.02.19
✎
17:18
|
(16) ну а как по другому то..
|
|||
19
tabarigen
07.02.19
✎
17:19
|
(17) не стоит
|
|||
20
tabarigen
07.02.19
✎
17:22
|
ВрТовары.Номенклатура = ВрОстатки.Характеристика.Владелец
поменял на ВрТовары.Номенклатура = ВрОстатки.Номенклатура стало еще чуть дольше выполняться 2.54 - 3 сек |
|||
21
AllJoke
07.02.19
✎
17:25
|
Параметр в виртуальные таблиц Остатки Цены поставить.
Где Номенклатура в (Выбрать Товар из ВТ_Товары) |
|||
22
Вафель
07.02.19
✎
17:27
|
(19) ну так поставь
|
|||
23
tabarigen
07.02.19
✎
17:28
|
(22) конфа на поддержке
|
|||
24
tabarigen
07.02.19
✎
17:59
|
(21) Спасибо тебе добрый человек.
И всем остальным тоже. |
|||
25
Puzoter
07.02.19
✎
18:01
|
(21) Как-то так:
ВЫБРАТЬ Номен.Ссылка КАК Номенклатура ПОМЕСТИТЬ ВрТовары ИЗ Справочник.Номенклатура КАК Номен ГДЕ Номен.Наименование ПОДОБНО "%" + &СтрокаПоиска + "%" Индексировать по Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Остатки.Характеристика КАК Характеристика, Остатки.Номенклатура КАК Номенклатура, Остатки.КоличествоОстаток КАК КоличествоОстаток ПОМЕСТИТЬ ВрОстатки ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, Склад = &РозничныйСклад И Номенклатура В (Выбрать Номенклатура ИЗ ВрТовары)) КАК Остатки Индексировать по Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Цены.Характеристика КАК Характеристика, Цены.Цена КАК Цена ПОМЕСТИТЬ ВрЦены ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Розничная И Номенклатура В (Выбрать Номенклатура ИЗ ВрТовары)) КАК Цены Индексировать по Характеристика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Первые 200 ВрТовары.Номенклатура КАК Номенклатура, ВрОстатки.Характеристика КАК Характеристика, ВрОстатки.КоличествоОстаток КАК КоличествоОстаток, ВрЦены.Цена КАК Цена ИЗ ВрТовары КАК ВрТовары ЛЕВОЕ СОЕДИНЕНИЕ ВрОстатки КАК ВрОстатки ЛЕВОЕ СОЕДИНЕНИЕ ВрЦены КАК ВрЦены ПО (ВрОстатки.Характеристика = ВрЦены.Характеристика) ПО (ВрТовары.Номенклатура = ВрОстатки.Номенклатура) |
|||
26
H A D G E H O G s
07.02.19
✎
18:17
|
Первые 200
в самый первый запрос |
|||
27
H A D G E H O G s
07.02.19
✎
18:18
|
И пользователи скажут тебе спасибо, когда забьют пустую строку
|
|||
28
Puzoter
07.02.19
✎
18:23
|
(26) Не факт, что у этих первых двухсот будут какие-то остатки, а значит такая выборка не имеет особого смысла.
|
|||
29
Puzoter
07.02.19
✎
18:26
|
(26) Хотя если в последнем запросе нет отбора по NULL то действительно лучше в первый.
|
|||
30
H A D G E H O G s
07.02.19
✎
18:28
|
(29) Да
|
|||
31
serg-lom89
08.02.19
✎
08:40
|
(14) наложи отбор на таблицы товара из первого запроса. как в (25)
|
|||
32
tabarigen
08.02.19
✎
11:46
|
(25) спасибо за ваш вариант.
мой запрос который я написал уже работает очень быстро. Еше бы понять зачем индексирование в вашем варианте. |
|||
33
Eiffil123
11.02.19
✎
18:20
|
(32) рекомендации 1С - индексировать поля временных таблиц, по которым идет отбор или соединение. Далеко не всегда влияет на результат, но общий подход такой.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |