8.х Долгое выполнение запроса.

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

  1. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.819
    Симпатии:
    155
    Баллы:
    104
    Здравствуйте.

    Есть запрос из типового отчета "Статистика чеков" из Розницы 2.2

    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        ЧекиИПозицииПродажиВозврата.Чек КАК ЧекККМ,
        ЧекиИПозицииПродажиВозврата.Позиция КАК КоличествоПозиций,
        ВЫБОР
            КОГДА ЧекиИПозицииПродажиВозврата.Чек.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа)
                ТОГДА ЧекиИПозицииПродажиВозврата.Позиция
            ИНАЧЕ 0
        КОНЕЦ КАК КоличествоПозицийПродажи,
        ВЫБОР
            КОГДА ЧекиИПозицииПродажиВозврата.Чек.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат)
                ТОГДА ЧекиИПозицииПродажиВозврата.Позиция
            ИНАЧЕ 0
        КОНЕЦ КАК КоличествоПозицийВозврата
    ПОМЕСТИТЬ ЧекиИКоличествоПозиций
    ИЗ
        (ВЫБРАТЬ
            ЧекиИПозиции.Чек КАК Чек,
            СУММА(ЧекиИПозиции.Позиция) КАК Позиция
        ИЗ
            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                ЧекККМТовары.Ссылка КАК Чек,
                ЧекККМТовары.Номенклатура КАК Номенклатура,
                ЧекККМТовары.Характеристика КАК Характеристика,
                1 КАК Позиция
            ИЗ
                Документ.ЧекККМ.Товары КАК ЧекККМТовары
            ГДЕ
                ЧекККМТовары.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Архивный)
                И ЧекККМТовары.Ссылка.Дата >= &НачалоПериода
                И (ЧекККМТовары.Ссылка.Дата <= &КонецПериода
                        ИЛИ &КонецПериода = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
                И НЕ ЧекККМТовары.Номенклатура В(&Номенклатура)) КАК ЧекиИПозиции
       
        СГРУППИРОВАТЬ ПО
            ЧекиИПозиции.Чек) КАК ЧекиИПозицииПродажиВозврата
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        ЧекККМ.Ссылка КАК ЧекККМ,
        ВЫБОР
            КОГДА ЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа)
                ТОГДА ЧекККМ.СуммаДокумента
            ИНАЧЕ 0
        КОНЕЦ КАК СуммаПродажи,
        ВЫБОР
            КОГДА ЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат)
                ТОГДА ЧекККМ.СуммаДокумента
            ИНАЧЕ 0
        КОНЕЦ КАК СуммаВозврата,
        1 КАК КоличчествоЧеков,
        ВЫБОР
            КОГДА ЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа)
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ КАК КоличествоЧековПродажи,
        ВЫБОР
            КОГДА ЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат)
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ КАК КоличествоЧековВозврата
    ПОМЕСТИТЬ ЧекиИСумма
    ИЗ
        Документ.ЧекККМ КАК ЧекККМ
    ГДЕ
        ЧекККМ.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Архивный)
        И ЧекККМ.Дата >= &НачалоПериода
        И (ЧекККМ.Дата <= &КонецПериода
                ИЛИ &КонецПериода = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
        И ЧекККМ.Магазин = &Магазин
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        ЧекиИСумма.ЧекККМ.КассаККМ КАК КассаККМ,
        ЧекиИСумма.ЧекККМ.Ответственный КАК Кассир,
        ЧекиИСумма.ЧекККМ.Магазин КАК Магазин,
        ЧекиИСумма.ЧекККМ,
        ЧекиИСумма.СуммаПродажи,
        ЧекиИСумма.СуммаВозврата,
        ЧекиИСумма.КоличчествоЧеков,
        ЧекиИСумма.КоличествоЧековПродажи,
        ЧекиИСумма.КоличествоЧековВозврата,
        ЧекиИКоличествоПозиций.КоличествоПозиций,
        ЧекиИКоличествоПозиций.КоличествоПозицийПродажи,
        ЧекиИКоличествоПозиций.КоличествоПозицийВозврата
    ИЗ
        ЧекиИСумма КАК ЧекиИСумма
            ЛЕВОЕ СОЕДИНЕНИЕ ЧекиИКоличествоПозиций КАК ЧекиИКоличествоПозиций
            ПО ЧекиИСумма.ЧекККМ = ЧекиИКоличествоПозиций.ЧекККМ
    Запрос из СКД. И я в него вставил только условия в ГДЕ на магазин и на номенклатуру не в списке.
    В отчёте этот запрос выполняется по всем магазинам быстрее чем у меня по одному.
    Время выполнения по одному магазину 350 сек. Это при том что я выбираю данные за 7 дней. И в результате выборки всего 660 строк.
  2. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    653
    Симпатии:
    123
    Баллы:
    104
  3. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.819
    Симпатии:
    155
    Баллы:
    104
    Почитал...
    Это запрос из типовой из отчета. В отчёте он работает на порядок быстрее чем у меня в консоли....
  4. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    653
    Симпатии:
    123
    Баллы:
    104
    Так и должно быть, убери оператор "В" и скорость будет такая же.
    А скок элементов в параметре "Номенклатура"??
  5. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.819
    Симпатии:
    155
    Баллы:
    104
    Элемент 1.
    --- Объединение сообщений, 20 мар 2017 ---
    Убрал это условие... результат тот же....
  6. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    653
    Симпатии:
    123
    Баллы:
    104
    Тогда может это не тот запрос? Может он всё-таки переопределяется где-нибудь в модуле? Либо консоль СКД кривая :)
  7. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.819
    Симпатии:
    155
    Баллы:
    104
    Хотя нет.. стало меньше на 170 сек. Вместо 370 стало 206 сек.
    Но всё равно много.
  8. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    653
    Симпатии:
    123
    Баллы:
    104
    А точно с одними и теми же правами запускаешь? может rls замедляет выборку...
  9. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.819
    Симпатии:
    155
    Баллы:
    104
    Права полные.
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    8.154
    Симпатии:
    827
    Баллы:
    204
    Условие ГДЕ в какой именно запрос добавляешь: первые 2 запроса в ВТ?
  11. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.819
    Симпатии:
    155
    Баллы:
    104
    Да. Добавил "магазин".
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    8.154
    Симпатии:
    827
    Баллы:
    204
    Ну что могу сказать: "магазин" и "номенклатура" - не индексируемые поля, в отличии от той же даты, поэтому происходит FullScan таблицы.

    По-хорошему, запрос еще нужно разбить на пакеты, тем самым избавится от подзапроса с РАЗЛИЧНЫЕ, который нагружает SQL сильнее.
  13. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    653
    Симпатии:
    123
    Баллы:
    104
    Т.е. выборка с условием по неиндексированному полю будет выполняться дольше, чем выборка без условия?
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    8.154
    Симпатии:
    827
    Баллы:
    204
    ...чем выборка по индексируемым полям.

    Выборка вообще без условий будет быстрее, но вот передача массива данных может занять больше времени.
  15. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    653
    Симпатии:
    123
    Баллы:
    104
    А я тебя подловить хотел)
    Ну так Тодд говорит, что по сравнению со стандартным отчетом скорость гораздо меньше, добавив лишь условие по магазину.
    --- Объединение сообщений, 20 мар 2017 ---
    Может нужно перестать гадать, а просто взглянуть на план запроса :)
  16. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    1.014
    Симпатии:
    23
    Баллы:
    29
    Давайте взглянем на план запроса уже?! Заодно научите меня как это делается.
  17. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.451
    Симпатии:
    330
    Баллы:
    104
    я бы начал с того, что
    а) рассказал - какие поля выводятся в типовом отчете
    б) получил актуальный текст запроса который выводится с полями из а)

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