8.х Запрос стал долго выполняться

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Muggsy, 3 дек 2015.

  1. TopicStarter Overlay
    Muggsy
    Offline

    Muggsy одно ЭС

    Регистрация:
    10 сен 2008
    Сообщения:
    243
    Симпатии:
    0
    Баллы:
    26
    В самописной конфе сделала отчет, запрос под него писался в консоли - выполнялся меньше минуты. Сегодня добавила пару полей в отчет - запрос выполняется уже пол часа. Нет могу понять почему. Кажется дело не в запросе. Тогда в чем? На прошлой неделе отчет формировался за три минуты, сейчас попробую оставить на ночь.
    Запрос
    Код:
    ВЫБРАТЬ
        ВЫРАЗИТЬ(ОсновнойОстатки.Субконто1 КАК Справочник.ЛицевыеСчета) КАК ЛС,
        ЕСТЬNULL(вт2010.СуммаНачальныйОстаток, 0) КАК С2009,
        ЕСТЬNULL(вт2010.СуммаОборотДт, 0) КАК Дт2010,
        ЕСТЬNULL(вт2010.СуммаОборотКт, 0) КАК Кт2010,
        ЕСТЬNULL(вт2011.СуммаОборотДт, 0) КАК Дт2011,
        ЕСТЬNULL(вт2011.СуммаОборотКт, 0) КАК Кт2011,
        ЕСТЬNULL(вт2012.СуммаОборотДт, 0) КАК Дт2012,
        ЕСТЬNULL(вт2012.СуммаОборотКт, 0) КАК Кт2012,
        ЕСТЬNULL(вт2013.СуммаОборотДт, 0) КАК Дт2013,
        ЕСТЬNULL(вт2013.СуммаОборотКт, 0) КАК Кт2013,
        ЕСТЬNULL(вт2014.СуммаОборотДт, 0) КАК Дт2014,
        ЕСТЬNULL(вт2014.СуммаОборотКт, 0) КАК Кт2014,
        ЕСТЬNULL(вт2015.СуммаОборотДт, 0) КАК Дт2015,
        ЕСТЬNULL(вт2015.СуммаОборотКт, 0) КАК Кт2015,
        ОсновнойОстатки.СуммаОстаток КАК со,
        ВЫРАЗИТЬ(ОсновнойОстатки.Субконто1 КАК Справочник.ЛицевыеСчета).ПометкаУдаления КАК Пометка,
        ВЫРАЗИТЬ(ОсновнойОстатки.Субконто1 КАК Справочник.ЛицевыеСчета).Адрес КАК Адрес,
        ВЫРАЗИТЬ(ОсновнойОстатки.Субконто1 КАК Справочник.ЛицевыеСчета).ФИОВладельца КАК ФИО
    ИЗ
        РегистрБухгалтерии.Основной.Остатки(ДАТАВРЕМЯ(2015, 12, 31, 23, 59, 59), Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.НЧЛ_Ф), , Фирма = &Фирма) КАК ОсновнойОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Основной.ОстаткиИОбороты(ДАТАВРЕМЯ(2010, 1, 1, 0, 0, 0), ДАТАВРЕМЯ(2010, 12, 31, 23, 59, 59), Год, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.НЧЛ_Ф), , Фирма = &Фирма) КАК вт2010
            ПО ОсновнойОстатки.Счет = вт2010.Счет
                И ОсновнойОстатки.Субконто1 = вт2010.Субконто1
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Основной.Обороты(ДАТАВРЕМЯ(2011, 1, 1, 0, 0, 0), ДАТАВРЕМЯ(2011, 12, 31, 23, 59, 59), Год, Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.НЧЛ_Ф), , Фирма = &Фирма, , ) КАК вт2011
            ПО ОсновнойОстатки.Счет = вт2011.Счет
                И ОсновнойОстатки.Субконто1 = вт2011.Субконто1
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Основной.Обороты(ДАТАВРЕМЯ(2012, 1, 1, 0, 0, 0), ДАТАВРЕМЯ(2012, 12, 31, 23, 59, 59), Год, Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.НЧЛ_Ф), , Фирма = &Фирма, , ) КАК вт2012
            ПО ОсновнойОстатки.Счет = вт2012.Счет
                И ОсновнойОстатки.Субконто1 = вт2012.Субконто1
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Основной.Обороты(ДАТАВРЕМЯ(2013, 1, 1, 0, 0, 0), ДАТАВРЕМЯ(2013, 12, 31, 23, 59, 59), Год, Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.НЧЛ_Ф), , Фирма = &Фирма, , ) КАК вт2013
            ПО ОсновнойОстатки.Счет = вт2013.Счет
                И ОсновнойОстатки.Субконто1 = вт2013.Субконто1
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Основной.Обороты(ДАТАВРЕМЯ(2014, 1, 1, 0, 0, 0), ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59), Год, Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.НЧЛ_Ф), , Фирма = &Фирма, , ) КАК вт2014
            ПО ОсновнойОстатки.Счет = вт2014.Счет
                И ОсновнойОстатки.Субконто1 = вт2014.Субконто1
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Основной.Обороты(ДАТАВРЕМЯ(2015, 1, 1, 0, 0, 0), ДАТАВРЕМЯ(2015, 12, 31, 23, 59, 59), Год, Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.НЧЛ_Ф), , Фирма = &Фирма, , ) КАК вт2015
            ПО ОсновнойОстатки.Счет = вт2015.Счет
                И ОсновнойОстатки.Субконто1 = вт2015.Субконто1
    ГДЕ
        ОсновнойОстатки.СуммаОстаток > 0
        И (ОсновнойОстатки.Субконто1 = &Субконто1
                ИЛИ &пустая)
    Добавленные поля - Адрес и ФИО. Вроде все должно работать также как и раньше.
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    1 когда делаете соединение полей
    ПО ОсновнойОстатки.Счет = вт2010.Счет
    И ОсновнойОстатки.Субконто1 = вт2010.Субконто1

    То тут то же субконто выразить надо а то все таблицы потянет

    2 У Вас вирт таблица соединяется левым соединением с вирт таблице что не хорошо СУБД не знает сколько записей будет возвращенно и может некорректоно построить план запроса. Еще тем более если мстатистика плохо собирается и не обновляется.
    По этому все что берете с вирт таблиц помещаете во Временные таблицы и уже их соединяете.

    3 Вот это условие не совсем понятно.
    И (ОсновнойОстатки.Субконто1 = &Субконто1
    ИЛИ &пустая)

    что тут
    а) Раз отбор идет по ОсновнойОстатки.Субконто1 он у Вас берется из основной таблице которая тянет к себе все остальные. Почему бы тогда это условие не поместить в отбор виртуальной таблице
    б)Что вообще этим условием что проеряет
    в) Скуль не очень любит ИЛИ. если есть возможность логически делать то лучше это делать через Объеденить
    Типа не

    Выбрать
    Товар1
    Из
    Спрвочника Товары
    Где
    Товар1=а или Товар1=и

    А через объеденить

    Выбрать
    Товар1
    Из
    Спрвочника Товары
    Где
    Товар1=а
    ОБЪЕДЕНИТЬ ВСЕ
    Выбрать
    Товар1
    Из
    Спрвочника Товары
    Где
    Товар1=и
    --- Объединение сообщений, 3 дек 2015 ---
    Ну это то что первое бросается

Поделиться этой страницей