×
Показано с 1 по 8 из 8
  1. Статья
    Гость

    Статья Статья: Методы оптимизации запросов

    <h2>Общие положения написания запросов </a></h2>
    <p>Примером неправильной работы с данными в 1С:Предприятиии, есть и остается избыточное обращение к базе данных, вне зависимости от того, в каком формате она хранится. </p>
    <p>Как избежать лишних обращений к ИБ, и тем самым существенно уменьшить время формирования отчета проиллюстрируем на примере &quot;Оптимизация Отчета&quot;. </p>
    <pre>Закладка 100%

    ТекстЗапроса =

    "//{{ЗАПРОС(Сформировать100)

    |Период с ВыбНачПериода по ВыбКонПериода;

    |Товар = Документ.РасхНакл.Товар;

    |Количество = Документ.РасхНакл.Количество;

    |Функция КоличествоСумма = Сумма(Количество);

    |Группировка Товар;

    |Условие(Товар в ВыбТовар);

    |Условие(Товар.ВидТовара = ВыбВидТовара);

    |"//}}ЗАПРОС;
    </pre>
    <p>При написании текста запроса необходимо учитывать, что Запрос при формировании выборки сам отрабатывает только элементарные условия , не запуская при этом исполнительную среду встроенного языка, что значительно экономит время. Если есть возможность привести условие к элементарному - это необходимо сделать. </p>
    <pre>

    "//{{ЗАПРОС(Сформировать15)

    |Период с ВыбНачПериода по ВыбКонПериода;

    |Товар = Документ.РасхНакл.Товар;

    |ВидТовара = Документ.РасхНакл.Товар.ВидТовара;

    |Количество = Документ.РасхНакл.Количество;

    |Функция КоличествоСумма = Сумма(Количество);

    |Группировка Товар;

    |Условие(Товар в ВыбТовар);

    |Условие(ВидТовара=ВыбВидТовара);

    |"//}}ЗАПРОС;
    </pre>
    <p>Так как выборка формируется на компьютере пользователя, то все данные, которые необходимы пользователю для построения отчета, должны быть, по возможности, получены посредством запроса. В таблице выводится значение кода товара – для этого в запросе необходимо ввести переменную КодТовара . Тогда для формирования отчета, отпадет необходимость, каждый раз обращаться к ИБ. Следует не забывать про методы Запроса - ЗначениеУпорядочивания и ЭтоГруппа , которые опять же извлекают данные из выборки, минуя ИБ, что заметно уменьшает время формирования запроса. </p>
    <pre>
    "//{{ЗАПРОС(Сформировать3)

    |Период с ВыбНачПериода по ВыбКонПериода;

    |Товар = Документ.РасхНакл.Товар;

    |ВидТовара = Документ.РасхНакл.Товар.ВидТовара;

    |КодТовара = Документ.РасхНакл.Товар.Код;

    |Количество = Документ.РасхНакл.Количество;

    |Функция КоличествоСумма = Сумма(Количество);

    |Группировка Товар;

    |Условие(Товар в ВыбТовар);

    |Условие(ВидТовара=ВыбВидТовара);

    |"//}}ЗАПРОС;
    </pre>
    <p>В отчете &quot;Оптимизация Отчета&quot; время выполнение самой медленной версии взято за 100%, остальные версии берутся как процент от нее. Следование правилам, дало возможность уменьшить время выполнения запроса почти на 2 порядка! </p>
    <h2>Особенности использования запросов для получения информации из справочников </a></h2>
    <p>В случае применения объекта &quot;Запрос&quot; для выборки информации из справочников 1С:Предприятия необходимо учитывать следующую особенность.

    Читать всю статью: http://www.klerk.ru/soft/1c?15580
    Поделиться с друзьями

  2. Клерк
    Регистрация
    20.08.2004
    Сообщений
    15
    Это в 100 раз чтоли?

  3. sacred
    Гость
    Ну, может человек в двоичной системе имел ввиду?

  4. Фырчун Аватар для Dracosha Andrew
    Регистрация
    07.02.2002
    Адрес
    Санкт-Петербург
    Сообщений
    2,259
    Реально в 10-20 раз ускорение можно получить. По некоторым запросам даже до 80 раз!!!
    Всех благ!!!
    Чувелёв Андрей

    ps: Всё вышеизложенное является моим частным мнением и не может претендовать на полноту изложения.

  5. Клерк
    Регистрация
    20.08.2004
    Сообщений
    15
    Можно примерчики запросов с разницей в выполнении в 80 раз и параметры базы данных. Что-то совсем не верится. Или надо делать запрос в запросе по группировкам запроса чтобы такой тормознутый запрос сваять.

  6. Фырчун Аватар для Dracosha Andrew
    Регистрация
    07.02.2002
    Адрес
    Санкт-Петербург
    Сообщений
    2,259
    Тухлый, попробуйте на вашей базе...

    У меня нет сейчас SQL версии 1С, с реальным набором данных.
    Всех благ!!!
    Чувелёв Андрей

    ps: Всё вышеизложенное является моим частным мнением и не может претендовать на полноту изложения.

  7. Клерк
    Регистрация
    20.08.2004
    Сообщений
    15
    К счастью я точно знаю как ускорить _запросы_ к sql базе на порядки - путем использования прямых запросов и их интерпретацией при помощи rainbow.dll и 1cpp.dll
    Все остальные меры считаю полумерами, однако не вижу ничего крамольного в вышеуказанной статье, вызывает изумление именно ускорение на два порядка. Здравомыслящие люди не проектирую отчеты, в которых выводится больше одной-двух сотен строк, ибо они не четабельны (за исключением регламентированной отчетности, которая сдается раз в месяц и время формирования которой на самом деле не критично, да и думаю мало кто сам пишет регламентированные отчеты), пожтому применение методов ЭтоГрппа при раскрытии группировок дает маленький выигрыш. Это все было к примеру - меня интересует именно ускорение _запроса_ на порядки. Всетаки хочу познать параметры базы данных и параметров отчета, при которых произошло ускорение хотябы раз в 50.

  8. Фырчун Аватар для Dracosha Andrew
    Регистрация
    07.02.2002
    Адрес
    Санкт-Петербург
    Сообщений
    2,259
    Тухлый, если вы так настаиваете попробую по памяти.

    Ноябрь прошлого года. 1С: Зарплата и кадры, по требованию отдела кадров потребовалось при запуске 1С показывать у кого день рожденья на этой неделе. Запрос средствами 1С отрабатывался около 6 минут, на сервере - 7 секунд. Считаем - 6*60/7 = 51,4 раза...

    На больших объёмах и особенно в конфигурациях типа "Зарплата и кадры" запросто можно получить такой результат.
    Всех благ!!!
    Чувелёв Андрей

    ps: Всё вышеизложенное является моим частным мнением и не может претендовать на полноту изложения.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)