Запрос: ============================================ УсловиеПоАвтору=""; Если ПустоеЗначение(ВыбАвтор)=0 Тогда Recordset.УстановитьТекстовыйПараметр("ВыбАвтор",ВыбАвтор); УсловиеПоАвтору=УсловиеПоАвтору+" AND $СпрКонтраг.Автор=:ВыбАвтор"; КонецЕсли; ТекстЗапроса=" |SELECT |$СпрКонтраг.Автор as [АвторКарточки $Справочник.Сотрудники], |СпрКонтраг.id as [Контрагент $Справочник.Контрагенты], |Max(СпрКонтраг.Descr) as КонтрагентТекст, |Max(СпрСотр.Descr) as АвторКарточкиТекст, |Max($СпрСотр.Подразделение) as [Подразделение $Справочник.ОргСтруктура], |Sum(РегКонтраг.СуммаУпрПриход) as Приход |FROM |$Справочник.Контрагенты as СпрКонтраг With (NOLOCK) |LEFT JOIN |$Справочник.Сотрудники as СпрСотр With (NOLOCK) ON СпрСотр.id=$СпрКонтраг.Автор |LEFT JOIN |$Справочник.ОргСтруктура as СпрПодр With (NOLOCK) ON СпрПодр.id=$СпрСотр.Подразделение |LEFT JOIN р)) as РегКонтраг ON СпрКонтраг.id=РегКонтраг.Контрагент |WHERE $СпрКонтраг.ДатаПервЗаписи>:ДатаНач AND $СпрКонтраг.ДатаПервЗаписи<:ДатаКон AND $СпрПодр.фТоргующее=1 |"+УсловиеПоАвтору+" |GROUP BY |$СпрКонтраг.Автор,СпрКонтраг.id |ORDER BY |Max($СпрСотр.Подразделение),АвторКарточкиТекст,КонтрагентТекст"; Recordset.УстановитьТекстовыйПараметр("ДатаКон",ДатаКон); Recordset.УстановитьТекстовыйПараметр("ДатаНач",ДатаНач);
===========================================
Суть запроса в следующем: отбираю контрагентов, у которых ДатаПервЗаписи попадает в заданный интервал дат, и по ним собираю данные из регистра Контрагенты. Этот реквизит (ДатаПервЗаписи) начал заполняться недавно, и у большинства контрагентов он пустой.
Условно скажем, что заполняться он начал с 1.10.08.
Так вот, когда указываю ДатаНач < 1.10.08, запрос летает быстро, за пару-тройку секунд. Но как только ДатаНач>1.10.08, все замедляется на порядки. Хотя по логике, данных для выборки меньше, и работать должен быстрее.
Может, он в индекс каким-то образом попадает? Может, кто что посоветует, как сделать, чтобы он всегда быстро работал.
|