Имя: Пароль:
1C
1С v8
Оптимизация характеристик в запросе
0 Powerfool
 
04.03.15
11:02
Доброго всем времени суток!

У меня не срочный но вполне обстоятельный вопрос к мастерам и гроссмейстерам скд. Есть отчет, в котором я из запроса получаю данные, в запросе я использую характеристики (вполне стандартная схема: есть объекты (Спр) у них есть хар-ки (ПВХ) и их значения (РС)).
Запрос довольно долго соображает и я подозреваю что это именно из-за характеристик, ибо по структуре своей он не очень уж сложный. С характеристиками никогда раньше не работал, поэтому чего то могу не знать и хочу спросить: Есть ли способы оптимизации этой фичи?
1 Powerfool
 
04.03.15
11:22
вира
2 Гёдза
 
04.03.15
11:24
не правильно ты угадал. дело не в характеристиках.
Левое соединение по индексу не затратная процедура
3 Powerfool
 
04.03.15
11:28
(2) Можно поподробнее, не уловил связи? Причем тут левое соединение по индексу?
4 Defender aka LINN
 
04.03.15
11:33
(3) Потому что характеристики - это левое соединение.
Смотри результирующий текст запроса, думай
5 ShoGUN
 
04.03.15
11:37
(3) Запрос покажи, тебе покажут левое соединение.
6 Powerfool
 
04.03.15
11:43
(5) Весь запрос приводить не буду чё зря пиксели расходовать, вот последний пакет
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Основная.Объект,
    Основная.Вид,
    Основная.Контакт,
    Основная.Адрес,
    Основная.ВидКЛ,
    Основная.КонтактКЛ,
    Основная.Характеристика,
    Основная.Значение,
    Основная.КонтактноеЛицоКонтрагента,
    Основная.Комментарий,
    Основная.КомментарийКЛ,
    Основная.ОборудованиеИПО,
    Основная.Регистратор,
    ДК_ЦепочкиСобытий.Событие КАК КрайнееСобытие,
    ПРЕДСТАВЛЕНИЕ(ДК_ЦепочкиСобытий.Событие.СостояниеСобытия) КАК СостояниеСобытияСтрокой,
    ПРЕДСТАВЛЕНИЕ(ДК_ЦепочкиСобытий.Событие.НачалоСобытия) КАК СобытиеНачалоСобытияСтрокой,
    КоличествоСобытийПоОснованию.КоличествоСобытий,
    ПРЕДСТАВЛЕНИЕ(КоличествоСобытийПоОснованию.КоличествоСобытий),
    Основная.Контрагент
ИЗ
    Основная КАК Основная
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ДК_ЦепочкиСобытий.Основание КАК Основание,
            МАКСИМУМ(ДК_ЦепочкиСобытий.Регистратор.Дата) КАК РегистраторДата
        ИЗ
            РегистрСведений.ДК_ЦепочкиСобытий КАК ДК_ЦепочкиСобытий
        
        СГРУППИРОВАТЬ ПО
            ДК_ЦепочкиСобытий.Основание) КАК КрайниеСобытие
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДК_ЦепочкиСобытий КАК ДК_ЦепочкиСобытий
            ПО КрайниеСобытие.Основание = ДК_ЦепочкиСобытий.Основание
                И КрайниеСобытие.РегистраторДата = ДК_ЦепочкиСобытий.Регистратор.Дата
        ПО Основная.Регистратор = КрайниеСобытие.Основание
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ДК_ЦепочкиСобытий.Основание КАК Основание,
            КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДК_ЦепочкиСобытий.Событие) КАК КоличествоСобытий
        ИЗ
            РегистрСведений.ДК_ЦепочкиСобытий КАК ДК_ЦепочкиСобытий
        
        СГРУППИРОВАТЬ ПО
            ДК_ЦепочкиСобытий.Основание) КАК КоличествоСобытийПоОснованию
        ПО Основная.Регистратор = КоличествоСобытийПоОснованию.Основание
{ХАРАКТЕРИСТИКИ
    ТИП(Справочник.ДК_ОбъектыРабот)
    ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.ДК_ХарактеристикиОбъектовРабот
    ПОЛЕКЛЮЧА Ссылка
    ПОЛЕИМЕНИ Представление
    ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
    ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ДК_ХарактеристикиОбъектовРабот.СрезПоследних
    ПОЛЕОБЪЕКТА Объект
    ПОЛЕВИДА Характеристика
    ПОЛЕЗНАЧЕНИЯ Значение }
7 Powerfool
 
04.03.15
11:49
(4) Смотрю, думаю. Слушаю Ваши мнения, думаю. Может я такой глупый и книг не читавший, так скиньте ссылочку плиз где есть откуда взять?
8 тарам пам пам
 
04.03.15
11:55
(6) Попробуй от ДК_ЦепочкиСобытий.Регистратор.Дата избавиться. Наверняка ведь регистратор - составной тип из кучи документов.
9 Powerfool
 
04.03.15
12:01
(8) Составной, только не такой и ужасный, там пока только 2 дока, но за совет все равно спасибо, учту
10 ShoGUN
 
04.03.15
12:02
Чтобы быть уверенным - я бы план запроса в профайлере глянул. Хотя подозреваю, что (8) прав и происходит джоин с кучей таблиц.
11 Powerfool
 
04.03.15
12:05
(10) Схема примерно такая: два пакета, второй в (6), а в первом два подзапроса, в каждом по нескольку вложенных запросов. Пробовал менять вложенные запросы на пакеты запросов с индексацией полей, по которым потом джоин делаю, но профита не заимел, отчет один хрен долго кубатурит
12 ShoGUN
 
04.03.15
12:23
(11) Попробуй по отдельности запросы пакета выполнить, хоть будет понятно, в каком тормоза. Описание "два подзапроса, в каждом по нескольку вложенных запросов." тоже на первый взгляд не очень быстро звучит.
13 Powerfool
 
04.03.15
12:30
(12) а "Пробовал менять вложенные запросы на пакеты запросов с индексацией полей, по которым потом джоин делаю" быстрее звучит. Разницы я не ощутил, вот проблема
14 ShoGUN
 
04.03.15
12:35
(13) Так какой запрос пакета тормозит-то? Первый? А почему ты его ещё не показал?
15 Powerfool
 
04.03.15
12:37
(14) Тоже этим вопросом задался. Каюсь сам дурак даже не посмотрел. Щас буду изучать
16 lEvGl
 
гуру
04.03.15
12:38
если речь о ЗначенияСвойствОбъектов, то там Объект Очень составной, с ним бывают проблемы
17 ShoGUN
 
04.03.15
12:40
(16) Через характеристики СКД довольно быстро работает, проверил на УТ сейчас.
18 ShoGUN
 
04.03.15
12:41
(15) >Каюсь сам дурак даже не посмотрел.
Ник оправдываешь? :) Чаще всего тормозят составные типы, хотя я видел и другие извраты.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс