1. Запрос в цикле (Классика жанра)
В чем ошибка: Выполнение одного и того же (или похожего) запроса на каждой итерации цикла.
Пример:
bslДля Каждого Док Из Документы Цикл
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ СУММА(Сумма) ИЗ РегистрНакопления.Обороты... ГДЕ Регистратор = &Док";
// Выполняем запрос для КАЖДОГО документа
КонецЦикла;Последствия: 1000 документов = 1000 запросов к базе. Огромные сетевые издержки и нагрузка на СУБД.Исправление: Использовать один запрос, который получает все данные сразу, с группировкой или использованием временных таблиц.
2. Проблема N+1 (Частный случай "Запроса в цикле")
В чем ошибка: Сначала получается список объектов (N), а затем для каждого из них делается дополнительный запрос (+1) для получения деталей.Пример: Получить список документов "Реализация", а затем в цикле для каждого документа запрашивать его строки табличной части.
Исправление: Использовать соединение таблиц (
LEFT JOIN) в одном запросе, чтобы получить все данные за один раз.
3. Выборка лишних данных (ВЫБРАТЬ * ...)
В чем ошибка: Выборка всех полей, когда нужны лишь несколько.
Последствия:
-
Увеличение сетевого трафика.
-
Потеря возможности использования "покрывающих индексов" (covering index). СУБД может быть вынуждена делать
Key Lookupк основной таблице.
Исправление: Явно перечислять только нужные поля в ВЫБРАТЬ.
4. Отсутствие индексов по часто используемым полям
В чем ошибка: Разработчик пишет отборы по полям, по которым нет индексов (например, по "Наименованию" в большом справочнике).Последствия:
Table Scan — самое дорогое, что может быть в запросе.Исправление: Совместная работа с администратором БД по созданию индексов на основе анализа самых медленных запросов.
5. Сложная логика в модулях СКД (системы компоновки данных)
В чем ошибка: Размещение ресурсоемких вычислений, циклов и запросов в:
-
ПриКомпоновкеРезультата -
ОбработкаРасшифровки
Последствия: Эти методы выполняются для каждой строки отчета или при любом действии пользователя, "подвешивая" клиентское приложение.
Исправление:
-
Переносить логику на сторону СУБД через вычисляемые поля в запросе.
-
Использовать настроенные поля в СКД.
-
Кешировать результаты.
Заключение:
-
Избегайте этих пяти ошибок, и вы решите большинство проблем с производительностью.
-
Главный принцип: меньше обращений к базе, больше работы за одно обращение.

