|
Приведение к тип (выразить) в запросе только для типов которые есть в выборке | ☑ | ||
---|---|---|---|---|
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
|
||||
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) а как заставить оптимизатор оптимизировать нормально?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |