Оптимизация запросов к базе данных в 1С: от мидла к сеньору Умение писать быстрые и эффективные запросы — один из ключевых навыков, отличающих мидл-разработчика от сеньора в экосистеме 1С.

Оптимизация запросов к базе данных в 1С: от мидла к сеньору Умение писать быстрые и эффективные запросы — один из ключевых навыков, отличающих мидл-разработчика от сеньора в экосистеме 1С.

26.11.2025

Оптимизация запросов к базе данных в 1С: от мидла к сеньору

Умение писать быстрые и эффективные запросы — один из ключевых навыков, отличающих мидл-разработчика от сеньора в экосистеме 1С. Неоптимизированные запросы становятся «узким местом» производительности, особенно в высоконагруженных системах. Давайте разберем практические приемы, которые позволят вам вывести свои навыки на новый уровень.

Почему оптимизация запросов — это важно?

Плохо написанный запрос может привести к:

  • Долгой отработке (секунды вместо миллисекунд).
  • Повышению нагрузки на сервер СУБД и блокировкам.
  • Негативному пользовательскому опыту («тормозит» интерфейс).

Ключевые принципы оптимизации запросов в 1С

1. Всегда указывайте нужные поля в SELECT

Избегайте конструкции «ВЫБРАТЬ ... *».

Плохо:

  • Запрос читает все поля, включая те, что не нужны для вашей задачи.
  • СУБД приходится считывать больше данных с диска.

Хорошо:

  • Явно перечисляйте только необходимые поля. Это снижает объем передаваемых данных и упрощает работу СУБД.

2. Используйте корректные условия в WHERE

Это самый мощный инструмент сокращения объема обрабатываемых данных.

  • Индексы — ваши друзья. Условия должны быть построены так, чтобы СУБД могла использовать индексы. Чаще всего индексы строятся по основным полям справочников и документов.
  • Избегайте недетерминированных функций. Использование функций (например, ГОД(Дата)) в условии часто приводит к полному сканированию таблицы вместо использования индекса по дате. Лучше использовать диапазон: "... ГДЕ Дата МЕЖДУ &НачДата И &КонДата".

3. ВНИМАТЕЛЬНО применяйте JOIN

Каждое соединение — это дополнительная вычислительная нагрузка.

  1. Соединяйте таблицы по индексируемым полям.
  2. Фильтруйте данные ДО соединения, а не после. Помещайте условия отбора в подзапросы или используют временные таблицы, чтобы уменьшить количество строк для JOIN.

4. Анализируйте план выполнения запроса

Не гадайте на кофейной гуще — смотрите, что делает СУБД.

  • "Управление запросами" в мониторинге конфигуратора — ваш главный инструмент.
  • "SET SHOWPLAN_ALL ON;" / "ВКЛЮЧИТЬ ПОКАЗ ПЛАНА ЗАПРОСОВ" — используйте эти инструкции перед выполнением запроса в файле *.sqc или через консоль запросов, чтобы увидеть детальный план. Ищите в плане операции «Table Scan» (сканирование всей таблицы) — это сигнал о проблеме.

Практический пример: до и после оптимизации

Задача