Имя: Пароль:
1C
 
Приведение к тип (выразить) в запросе только для типов которые есть в выборке
0 ИС-2
 
naïve
19.02.15
11:07
Есть большой запрос в конце которого происходит объединение всех временных таблиц. В итоге в поле "Дата_Нач" может быть несколько (например, 2) разных типов документов. Т.к оно получается из "регистратора", то 1с считает что там могут быть все типы какие есть в "регистраторе" (все 10).
В итоге SQL соединяет со всеми таблицами, что  приводит к диким тормозам выборки.

Тормозить начинает при обращение к реквизиту "подразделение" (соединяет со всеми таблицами).

Док_Нач.Подразделение

Проблему решил с приведением к типу. Но мне пришлось описывать типы, которые могут быть. Но если добавится еще какой-то документ, то отчет станет работать некорректно.



    ВЫБОР
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.ЗаказНаПроизводство
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.ЗаказНаПроизводство).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.ЗаказПокупателя
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.ЗаказПокупателя).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.ЗакрытиеЗаказовНаПроизводство
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.ЗакрытиеЗаказовНаПроизводство).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.КарточкаДокумента
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.КарточкаДокумента).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.КорректировкаДолга
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.КорректировкаДолга).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.ОплатаОтПокупателяПлатежнойКартой
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.ОплатаОтПокупателяПлатежнойКартой).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.ОтчетПроизводстваЗаСмену
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.ОтчетПроизводстваЗаСмену).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.ПлатежноеПоручениеВходящее
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.ПлатежноеПоручениеВходящее).Подразделение
        
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.ПриходныйКассовыйОрдер
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.ПриходныйКассовыйОрдер).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.ПриходныйОрдерНаТовары
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.ПриходныйОрдерНаТовары).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.Пропуск
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.Пропуск).ДокументОснование.Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.РасходныйОрдерНаТовары
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.РасходныйОрдерНаТовары).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.РеализацияТоваровУслуг
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.РеализацияТоваровУслуг).Подразделение
        КОГДА ВТ_ВсеПоказатели.Док_Нач ССЫЛКА Документ.РезервированиеТоваров
            ТОГДА ВЫРАЗИТЬ(ВТ_ВсеПоказатели.Док_Нач КАК Документ.РезервированиеТоваров).Подразделение
        
    КОНЕЦ КАК Подр_Нач

Можно ли сделать как-то проще? Т.е чтобы SQl соединял только с таблицами которые действительно есть в выборках
1 Жан Пердежон
 
19.02.15
11:10
можно подразделение вынести в измерения
2 Maxus43
 
19.02.15
11:13
ознакомтесь
http://infostart.ru/public/184361/
3 Maxus43
 
19.02.15
11:15
суть вкратце - чтобы использовались индексы и не соединяло с кучей таблиц - переписать запрос на Объединения, НО! он станет громозднким м нечитаемым почти, хоть и быстрым
4 Serg_1960
 
19.02.15
11:29
Собственно говоря, тс выполнил неявную оптимизацию запроса "вручную" вместо оптимизатора. Который обращения в запросе к значениям "через точку" не оптимально "оптимизирует" - индексы  не работают и левые соединения размножаются.
5 ИС-2
 
naïve
19.02.15
12:12
(4) а как заставить оптимизатор оптимизировать нормально?