Тема такая. Решил переписать отчетег попрямевшими руками. Переписал с 8 запросов все на один, сижу, радуюсь. И тут: БАЦ! А запрос формируется 5 минут. Хотя кривой отчет из 8 запросов и потом прекривейшего соединения вручную всех таблиц формировался ну от силы минуту, а то и пол. Стал разбираться в чем дело, рыл долго долго земелю, нашел, что тормозить начинает при подключении документа реализации. Время подскакивает с 200 миллисекунд до 86 000.
Текст запроса: SELECT |Ном.id [Номенклатура: Справочник.Номенклатура], |Заказы.ДокументЗаказа [Заявка: Документ.ЗаявкаПокупателя], |Поступления.Поступление [Поступление: Документ.ПоступлениеТМЦ], |ПостТМЦСтр.Количество [Поступило], |ПостТМЦСтр.Сумма, |ПостТМЦСтр.СуммаНДС, |ПостТМЦСтр.Сертификация, |Ном.Резерв, |Заказы.Количество [Заказано] |from Справочник_ПоступленияПоЗаказам as Поступления |inner join Документ_ПоступлениеТМЦ as ПостТМЦ |on Поступления.Поступление = ПостТМЦ.iddoc |inner join Справочник_ВиртуальныеЗаказы as Заказы |on Поступления.parentext = Заказы.id |inner join Справочник_Номенклатура as Ном |on Ном.id = Заказы.Parentext |inner join Журнал as Жур |on Жур.iddoc = ПостТМЦ.iddoc |inner join ДокументСтроки_ПоступлениеТМЦ as ПостТМЦСтр |on (ПостТМЦ.iddoc = ПостТМЦСтр.iddoc)and(ПостТМЦСтр.Номенклатура = Заказы.Parentext) // |left join Документ_Реализация as Реал // |on Реал.Заявка = Заказы.ДокументЗаказа // |on substr(Реал.ДокОснование,5,9) = Заказы.ДокументЗаказа |where Жур.date between :НачДата and :КонДата |and Жур.closed = 1 |and Заказы.ismark <> '*'";
Если раскомментировать закомментированный кусок запроса*** - время подлетает на 85 с лишним секунд. И это за месяц. А мне надо за год. Вот такой писец. Сейчас после запроса я перебираю таблицу, выбираю вручную подчиненные документы, выбираю строки в них, обрабатываю. и вся эта фигня выполняется 1 секунду. Так почему же в запросе выполняется 85???? По реквизиту "ДокументЗаказа" - в справочнике ВиртуальныеЗаказы стоит отбор и сортировка. *** - Соединение пробовал двумя способами, разумеется, не одновременно, "Заявка" имеет вид "Документ.ЗаявкаПокупателя", "ДокОснование" - "Документ". Обеими способами соединение работает, вопрос только во времени.
Может кто что подскажет умное?)
|