|
Оптимизация запроса | ☑ | ||
---|---|---|---|---|
0
Bibr
27.03.14
✎
17:11
|
ВЫБРАТЬ
ПартииТоваровНаСкладахОстатки.ДокументОприходования КАК ДокументОприходования, ПартииТоваровНаСкладахОстатки.Номенклатура.Артикул КАК Артикул, ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура, ПартииТоваровНаСкладахОстатки.Склад КАК Склад, ПартииТоваровНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения, ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, ВЫБОР КОГДА ПартииТоваровНаСкладахОстатки.КоличествоОстаток = 0 ТОГДА 0 ИНАЧЕ ПартииТоваровНаСкладахОстатки.СтоимостьОстаток / ПартииТоваровНаСкладахОстатки.КоличествоОстаток КОНЕЦ КАК Цена, ПартииТоваровНаСкладахОстатки.СтоимостьОстаток КАК СтоимостьОстаток, ПартииТоваровНаСкладахОстатки.ДокументОприходования.Дата КАК ДатаПартии ПОМЕСТИТЬ ВТ ИЗ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&НаДату, ) КАК ПартииТоваровНаСкладахОстатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.ДокументОприходования, ВложенныйЗапрос.Номенклатура, ВЫБОР КОГДА ВложенныйЗапрос.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг ТОГДА ВложенныйЗапрос.СерияНоменклатуры КОГДА ВложенныйЗапрос.ДокументОприходования ССЫЛКА Документ.ОприходованиеТоваров ТОГДА ВложенныйЗапрос.СерияНоменклатуры1 КОГДА ВложенныйЗапрос.ДокументОприходования ССЫЛКА Документ.ВозвратТоваровОтПокупателя ТОГДА ВложенныйЗапрос.СерияНоменклатуры2 ИНАЧЕ NULL КОНЕЦ КАК СерияНоменклатуры ПОМЕСТИТЬ ВТНомераГТД ИЗ (ВЫБРАТЬ ВТ.ДокументОприходования КАК ДокументОприходования, ВТ.Номенклатура КАК Номенклатура, МАКСИМУМ(ПоступлениеТоваровУслугТовары.СерияНоменклатуры) КАК СерияНоменклатуры, МАКСИМУМ(ОприходованиеТоваровТовары.СерияНоменклатуры) КАК СерияНоменклатуры1, МАКСИМУМ(ВозвратТоваровОтПокупателяТовары.СерияНоменклатуры) КАК СерияНоменклатуры2 ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ПО ВТ.ДокументОприходования = ПоступлениеТоваровУслугТовары.Ссылка И ВТ.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОприходованиеТоваров.Товары КАК ОприходованиеТоваровТовары ПО ВТ.ДокументОприходования = ОприходованиеТоваровТовары.Ссылка И ВТ.Номенклатура = ОприходованиеТоваровТовары.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары ПО ВТ.ДокументОприходования = ВозвратТоваровОтПокупателяТовары.Ссылка И ВТ.Номенклатура = ВозвратТоваровОтПокупателяТовары.Номенклатура СГРУППИРОВАТЬ ПО ВТ.ДокументОприходования, ВТ.Номенклатура) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТНомераГТД.ДокументОприходования, ВТНомераГТД.Номенклатура, ВТНомераГТД.СерияНоменклатуры, МАКСИМУМ(РеализацияТоваровУслугТовары.Ссылка.Дата) КАК Дата ПОМЕСТИТЬ ГТДиДатыОтгрузок ИЗ ВТНомераГТД КАК ВТНомераГТД ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ПО ВТНомераГТД.ДокументОприходования = ПартииТоваровНаСкладах.ДокументОприходования И ВТНомераГТД.Номенклатура = ПартииТоваровНаСкладах.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ПО ВТНомераГТД.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура И ВТНомераГТД.СерияНоменклатуры = РеализацияТоваровУслугТовары.СерияНоменклатуры И (ПартииТоваровНаСкладах.Регистратор = РеализацияТоваровУслугТовары.Ссылка) СГРУППИРОВАТЬ ПО ВТНомераГТД.ДокументОприходования, ВТНомераГТД.Номенклатура, ВТНомераГТД.СерияНоменклатуры ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Артикул, ВТ.Номенклатура.Наименование КАК НаименованиеНоменклатуры, ВТ.Склад, ВТ.ЕдиницаИзмерения, ВТ.КоличествоОстаток, ВТ.Цена, ВТ.СтоимостьОстаток, ВТ.ДатаПартии, ГТДиДатыОтгрузок.СерияНоменклатуры.НомерГТД КАК НомерГТД, ГТДиДатыОтгрузок.Дата КАК ДатаПоследнейОтгрузки ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ ГТДиДатыОтгрузок КАК ГТДиДатыОтгрузок ПО ВТ.ДокументОприходования = ГТДиДатыОтгрузок.ДокументОприходования И ВТ.Номенклатура = ГТДиДатыОтгрузок.Номенклатура УПОРЯДОЧИТЬ ПО НаименованиеНоменклатуры Подскажите, где неоптимально. После того, как в предпоследней ВТ ГТДиДатыОтгрузок добавил левое соединение, запрос стал сильно тормозить. Как бы оптимизировать? |
|||
1
Avganec
27.03.14
✎
17:15
|
(0) как минимум добавть индексы в пакеты
|
|||
2
Avganec
27.03.14
✎
17:16
|
+(1) поменяй формирование таблицы ВТНомераГТД, а то там в соединених полная жесть
|
|||
3
Avganec
27.03.14
✎
17:19
|
+(2) аналогично и формирование ГТДиДатыОтгрузок.
|
|||
4
vmlspb
27.03.14
✎
17:23
|
1) вложенную таблицу сделать временной
2) добавить индексы по соединяемым полям 3) не делать выборку из документо и их табл. частей, а из регистров. А вообще, выполнить каждый подзапрос в отдельности, определить тяжелые и оптимизировать. Возможно потребуется пересчитать итоги по рег. накопления. |
|||
5
Bibr
27.03.14
✎
17:44
|
(4) спасибо.
а без доков увы нельзя. понимаю, что некошерно, но выбора нет |
|||
6
Avganec
27.03.14
✎
17:50
|
(5) сделать РС и пиши его этими доками - результат будет потрязающий
|
|||
7
Bibr
27.03.14
✎
18:08
|
(6) есть база клиента, нужен отчёт. ничего более)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |