8.х SQL работает в 50 раз медленнее файлового варианта

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

  1. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Почему данный код:
    Код:
    Для Каждого Элемент Из ТЗ Цикл
            Запрос=Новый Запрос;
            Запрос.Текст=
            "ВЫБРАТЬ
            |    ФизическиеЛица.Ссылка
            |ИЗ
            |    Справочник.ФизическиеЛица КАК ФизическиеЛица
            |ГДЕ
            |    ФизическиеЛица.Наименование = &Наименование";
            Запрос.УстановитьПараметр("Наименование",Элемент.ФИО);
            ТаблицаФизиков=Запрос.Выполнить().Выгрузить();
            Если ТаблицаФизиков.Количество()>=1 Тогда
                Выборка=РегистрыСведений.ЛицевыеСчетаРаботниковОрганизации.Выбрать();
                Пока Выборка.Следующий() Цикл
                    Если СокрЛП(Выборка.ФизЛицо.Наименование)=Элемент.ФИО Тогда
                        Сотр=Выборка.ПолучитьМенеджерЗаписи();
                        Сотр.Удалить();
                        Сообщить("У сотрудника "+Элемент.ФИО+" удалены все лицевые счета!");
                    КонецЕсли;
                КонецЦикла;   
            КонецЕсли;
        КонецЦикла;
    в файловом варианте работает примерно в 50 раз быстрее чем в SQL (Microsoft SQL). Хотя железо сервера мощнее локальной машины.
    Как его оптимизировать?
    Спасибо.
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Запрос в цикле - бред!
    Ivan2014 нравится это.
  3. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Код:
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ФизическиеЛица.Ссылка
    |ПОМЕСТИТЬ ВТ_ФизЛица
    |ИЗ
    |    Справочник.ФизическиеЛица КАК ФизическиеЛица
    |ГДЕ
    |    ФизическиеЛица.Наименование В(&ТЗ)
    |;
    |Выбрать
    |ЛицевыеСчетаРаботниковОрганизации.ФизЛицо
    |ИЗ РегистрыСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации
    |внутреннее соединение ВТ_ФизЛица КАК ВТ_ФизЛица
    |ПО ЛицевыеСчетаРаботниковОрганизации.ФизЛицо = ВТ_ФизЛица.Ссылка";
    Запрос.УстановитьПараметр("ТЗ", ТЗ);
    ТаблицаФизиков=Запрос.Выполнить().Выбрать();
    Пока ТаблицаФизиков.Следующий() Цикл
        Сотр=ТаблицаФизиков.ФизЛицо.ПолучитьМенеджерЗаписи();
        Сотр.Удалить();
        Сообщить("У сотрудника "+Элемент.ФИО+" удалены все лицевые счета!");
    КонецЦикла;
    --- Объединение сообщений, 1 авг 2014 ---
    Писал на коленке, так что смысл оттуда получите.
    Ivan2014 нравится это.
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    У вас кие намтройки SQl авто Shrink стоит или нет. как размер под лог файл выделяется? сразу выделено много или прирост идет по 1мБ или %. Так трудно сказать. Может при таком запросе рости Лог файл хорошо, а если там место выделяется по 1мб то каждый раз так выделять - это очень много времени. По этому надо было сразу под лог выделить большое количество и все. Аналогично с файлом базы.
    Еще вопрос где это все запускается на какой машине какая у Вас там сеть и т.д.
    Ну это только предположение
    Ivan2014 нравится это.
  5. LordMaverick
    Offline

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

    Регистрация:
    17 мар 2014
    Сообщения:
    3.429
    Симпатии:
    372
    Баллы:
    104
    да хоть какие предположения, у него банальщина, выполнение запроса внутри цикла
    --- Объединение сообщений, 1 авг 2014 ---
    потому что элементарные вещи надо было хотя бы прочесть сперва, и учесть чужие грабли
    да и весь код было хорошо приводить а не его куски
    Последнее редактирование: 1 авг 2014
    Ivan2014 нравится это.
  6. vartanet
    Offline

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

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    запрос в цикле.. классика..

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