|
Как ускорить этот небольшой запрос? | ☑ | ||
|---|---|---|---|---|
|
0
dinam
01.07.14
✎
08:12
|
День добрый. Есть не очень большой запрос, который выполняется больше 20 секунд, к сожалению не хватает знаний, чтобы его ускорить. Подскажите примерное направление для ускорения сего чуда:
ТекстЗапросаСписокНоменклатуры = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПереоценкаТоваровВРозницеТовары.Номенклатура |ИЗ | Документ.ПереоценкаТоваровВРознице.Товары КАК ПереоценкаТоваровВРозницеТовары |ГДЕ | ПереоценкаТоваровВРозницеТовары.Ссылка = &ДокСсылка"; Запрос1 = Новый Запрос; Запрос1.УстановитьПараметр("ДокСсылка", Ссылка); Запрос1.Текст = ТекстЗапросаСписокНоменклатуры; Табл = Запрос1.Выполнить().Выгрузить(); ТекстЗапросаСписокХарактеристик ="ВЫБРАТЬ РАЗЛИЧНЫЕ | ПереоценкаТоваровВРозницеТовары.ХарактеристикаНоменклатуры |ИЗ | Документ.ПереоценкаТоваровВРознице.Товары КАК ПереоценкаТоваровВРозницеТовары |ГДЕ | ПереоценкаТоваровВРозницеТовары.Ссылка = &ДокСсылка"; Запрос1.Текст = ТекстЗапросаСписокХарактеристик; Табл = Запрос1.Выполнить().Выгрузить(); ТекстЗапроса = " |ВЫБРАТЬ | &Склад КАК Склад, | Док.Номенклатура КАК Номенклатура, | ЕСТЬNULL(Характеристики.Ссылка, Док.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатуры, | Остатки.СерияНоменклатуры КАК СерияНоменклатуры, | Остатки.Качество КАК Качество, | Док.ЦенаВРознице * Остатки.КоличествоОстаток - Остатки.СуммаПродажнаяОстаток КАК СуммаПродажная |ИЗ | Документ.ПереоценкаТоваровВРознице.Товары КАК Док |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | Характеристики.Ссылка КАК Ссылка, | Характеристики.Владелец КАК Владелец | ИЗ | Справочник.ХарактеристикиНоменклатуры КАК Характеристики | ГДЕ | Характеристики.Владелец | И Характеристики.Ссылка | И Характеристики.Ссылка НЕ В ( | ВЫБРАТЬ | ЦеныПродажные.ХарактеристикаНоменклатуры | ИЗ | РегистрСведений.ЦеныАТТ.СрезПоследних(&Дата, | Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")) КАК ЦеныПродажные | ) | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Ссылка, | Номенклатура.Ссылка КАК Владелец | ИЗ | Справочник.Номенклатура КАК Номенклатура | ГДЕ | Номенклатура.Ссылка В (" + ТекстЗапросаСписокНоменклатуры + ") | ) КАК Характеристики |ПО | Док.Номенклатура = Характеристики.Владелец | И Док.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) |СОЕДИНЕНИЕ | РегистрНакопления.ТоварыВРознице.Остатки(&Дата, Склад = &Склад И Номенклатура В (" + ТекстЗапросаСписокНоменклатуры + ")) КАК Остатки |ПО | Док.Номенклатура = Остатки.Номенклатура | И ЕСТЬNULL(Характеристики.Ссылка, Док.ХарактеристикаНоменклатуры) = Остатки.ХарактеристикаНоменклатуры |ГДЕ | Док.Ссылка = &ДокСсылка | И Док.ЦенаВРознице * Остатки.КоличествоОстаток - Остатки.СуммаПродажнаяОстаток <> 0 |"; |
|||
|
1
Мимохожий Однако
01.07.14
✎
08:25
|
Здесь три запроса и две выгрузки результатов.
Сделай пакетный запрос с временными таблицами. |
|||
|
2
kosts
01.07.14
✎
08:29
|
Вот это вызывает подозрение, зачем получать посторонние характеристики (НЕ В)
|
|||
|
3
kosts
01.07.14
✎
08:32
|
Тут скорее всего нужно использовать ЕстьNull(Остатки.КоличествоОстаток,0) и ЕстьNull(Остатки.СуммаПродажнаяОстаток,0) |
|||
|
4
ChiginAV
01.07.14
✎
08:38
|
СписокНоменклатуры уже получен выше, зачем его еще несколько раз получать в большом запросе?
Вложенный запрос из условия лучше вынести как отдельный. Выгрузить в массив и использовать этот массив в условии |
|||
|
5
kosts
01.07.14
✎
08:42
|
(2) + В этом же куске, зачем получать характеристики через цены, возможно лучше цены если цены как то влияют, то их левым соединением к главному запросу присоединить.
Напиши цель запроса. Тогда лучше подскажут. |
|||
|
6
Мимохожий Однако
01.07.14
✎
08:45
|
(5)+1
|
|||
|
7
Fragster
гуру
01.07.14
✎
08:55
|
сделать так, чтобы запрос открывался конструктором
|
| Форум | Правила | Описание | Секции | Поиск |