Найти в Дзене
space765

1С: Оптимизация запросов

Методики оптимизации запросов 1С. 1.) Запрос в цикле работает медленно. Лучше избегать таких конструкций языка. 2.) Виртуальную таблицу Остатки лучше класть в ВТ по рекомендации фирмы 1С. Затрудняюсь сказать, касается ли данное правило таблицы Обороты и ОстаткиИОбороты, но это можно проверить на практике замером производительности, например. 3.) Условие ГДЕ в виртуальной таблице лучше писать в ее параметрах, поскольку если делать это явно, то усложняется план запроса.
4.) Выполнить() выгружает результат на диск, а Выгрузить() в ОЗУ. Понятно, что ОЗУ работает быстрее, но большие таблицы могут повесить компьютер. 5.) Субъективно если наложить условие ГДЕ на левую и правую таблицы до оператора ЛЕВОЕ СОЕДИНЕНИЕ, то запрос немного ускоряется. Имеет смысл только на очень больших таблицах. 6.) Индексы. По теории реляционных баз данных индекс должен быть на всех ключевых полях таблиц. Индекс на УПОРЯДОЧИТЬ ПО тоже должен быть. Индекс на поля, по которым происходит СОЕДИНЕНИЕ должен присутствов

Методики оптимизации запросов 1С.

1.) Запрос в цикле работает медленно. Лучше избегать таких конструкций языка.

2.) Виртуальную таблицу Остатки лучше класть в ВТ по рекомендации фирмы 1С. Затрудняюсь сказать, касается ли данное правило таблицы Обороты и ОстаткиИОбороты, но это можно проверить на практике замером производительности, например.

3.) Условие ГДЕ в виртуальной таблице лучше писать в ее параметрах, поскольку если делать это явно, то усложняется план запроса.
4.) Выполнить() выгружает результат на диск, а Выгрузить() в ОЗУ. Понятно, что ОЗУ работает быстрее, но большие таблицы могут повесить компьютер.

5.) Субъективно если наложить условие ГДЕ на левую и правую таблицы до оператора ЛЕВОЕ СОЕДИНЕНИЕ, то запрос немного ускоряется. Имеет смысл только на очень больших таблицах.

6.) Индексы. По теории реляционных баз данных индекс должен быть на всех ключевых полях таблиц. Индекс на УПОРЯДОЧИТЬ ПО тоже должен быть. Индекс на поля, по которым происходит СОЕДИНЕНИЕ должен присутствовать. Вероятно, если повесить индекс на поля, по которым происходит отбор ГДЕ и может быть СГРУППИРОВАТЬ, то скорость также увеличится. Нужно помнить про составной индекс. Необходимо понимать, что индекс увеличивает время на запись, поэтому возможно избыточное индексирование. Не исключено, что на небольшие таблицы нет смысла вешать индексы.

7.) Инструменты оптимизации запросов это консоль отчетов или SQL Profiler, а также замер производительности.
8.) Существуют неявные соединения таблиц. Например есть строка кода Сообщить(Товары.Номенклатура). Лучше так: Сообщить(Товары.Номенклатура.Наименование) или так:

Сообщить(Товары.Номенклатура.Представление), для того, чтобы не тянуть за собой весть объект.

9.) Избегаем вложенных запросов и циклов. Кстати это касается и массивов и структур.

10.) ВЫРАЗИТЬ в Запросе может ускорить работу.

11.) Где-то слышал, что в СКД могут быть отборы. В этом случае поля в запросе лучше располагать последовательно соответственно отборам в СКД.

12.) Оператор ИЛИ в соединении запросов - медленный. Можно использовать 2 таблицы и ОБЪЕДИНИТЬ ВСЕ, например.