8.х Почему данный код долго выполняется в SQL варианте, а в файловом на порядки быстрее?

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Ivan2014, 8 ноя 2014.

  1. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Всех приветствую.
    Есть вот такой код:
    Код:
        "ВЫБРАТЬ
        |    ХозрасчетныйОбороты.Субконто1.Наименование,
        |    ХозрасчетныйОбороты.Субконто2.Дата,
        |    ХозрасчетныйОбороты.Субконто2.Номер,
        |    ХозрасчетныйОбороты.СуммаОборотКт,
        |    дсСопоставлениеДокументовКонтрагентов.СуммаБУ,
        |    дсСопоставлениеДокументовКонтрагентов.ДокументРасчеты.Номер,
        |    дсСопоставлениеДокументовКонтрагентов.ДокументРасчеты.Дата,
        |    ХозрасчетныйОбороты.Субконто2.ДокументОснование.СуммаДокумента,
        |    ХозрасчетныйОбороты.ПериодДень,
        |    дсНДСЗаписиКнигиПродажНДС.НДС,
        |    дсНДСЗаписиКнигиПродажПериод.Период КАК ПериодКнигиПродаж
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &ДатаОкончания, Авто, , , , , ) КАК ХозрасчетныйОбороты
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.дсСопоставлениеДокументовКонтрагентов КАК дсСопоставлениеДокументовКонтрагентов
        |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.дсНДСЗаписиКнигиПродаж КАК дсНДСЗаписиКнигиПродажНДС
        |            ПО дсСопоставлениеДокументовКонтрагентов.ДокументРасчеты = дсНДСЗаписиКнигиПродажНДС.Документ
        |        ПО ХозрасчетныйОбороты.Субконто2.ДокументОснование = дсСопоставлениеДокументовКонтрагентов.ДокументПлатежи
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.дсНДСЗаписиКнигиПродаж КАК дсНДСЗаписиКнигиПродажПериод
        |        ПО ХозрасчетныйОбороты.Субконто2.ДокументОснование = дсНДСЗаписиКнигиПродажПериод.Документ
        |ГДЕ
        |    ХозрасчетныйОбороты.Счет = &Счет";
    В файловом варианте данный код выполняется на несколько порядков быстрее . В чем причина?
    Спасибо.
    --- Объединение сообщений, 8 ноя 2014 ---
    Ориентировочно не на порядки, но на порядок (х10) точно.
    Притом что сервер сам по себе быстрее рабочей станции. Настройки MSQL стандартные для 1С.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Потому, что при использовании клиент-серверного варианта время тратится так же на:
    1. Передачу данных от 1С к SQL серверу
    2. Выполнение запроса SQL сервером. План запроса при этом может построится не оптимально и это так же скажется на увеличении времени выполнения запроса. Настройки SQL-сервера в плане размещения файлов данных далеки от рекомендованных - увеличение времени выполнения запроса.
    3. Передача результата запроса от SQL сервера в 1С

    Клиент-серверный вариант, можно сказать, НИКОГДА не будет быстрее файлового варианта, его не по причине быстродействия БД для 1-го пользователя используют.
    Ivan2014 нравится это.
  3. Dragnir
    Offline

    Dragnir Новичок в 1С

    Регистрация:
    22 окт 2014
    Сообщения:
    39
    Симпатии:
    8
    Баллы:
    4
    Я полностью согласен с предыдущим форумчанином. А применительно к данной конкретной ситуации с пунктом 2.
    Полагаю, что в клиент-серверном варианте СУБД при построении плана запроса и получения выборки очень сильно матюгается...
    Вот на это:

    Код:
    | РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &ДатаОкончания, Авто, , , , , ) КАК ХозрасчетныйОбороты
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.дсСопоставлениеДокументовКонтрагентов КАК дсСопоставлениеДокументовКонтрагентов
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.дсНДСЗаписиКнигиПродаж КАК дсНДСЗаписиКнигиПродажНДС
    | ПО дсСопоставлениеДокументовКонтрагентов.ДокументРасчеты = дсНДСЗаписиКнигиПродажНДС.Документ
    | ПО ХозрасчетныйОбороты.Субконто2.ДокументОснование = дсСопоставлениеДокументовКонтрагентов.ДокументПлатежи
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.дсНДСЗаписиКнигиПродаж КАК дсНДСЗаписиКнигиПродажПериод
    | ПО ХозрасчетныйОбороты.Субконто2.ДокументОснование = дсНДСЗаписиКнигиПродажПериод.Документ
    1. Почему условие на счет не используется к виртуальной таблице оборотов, а в секции запроса "ГДЕ"?
    2. Почему при построении соединений используется все физические таблицы регистров наклопления? Почему не виртуальные?

    Этот код будет долго работать в клиент-серверном варианте при одном работающем пользователе, а если в базе одновременно несколько пользователей
    и они проводят документы, пишущие движения в регистры накопления, используемые в запросе, да еще в этот момент запустить сам отчет...

    Результат что называется будет UNECSPECTED.
    Ivan2014 нравится это.
  4. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Ребята, оформляйте код тэгами CODE
    Ivan2014 нравится это.
  5. Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    Если написать такой запрос на сдаче 1С:Специалист - бан пожизненный. :) Шутка.

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