База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как оптимизировать SQL-запрос в 1С и улучшить его производительность?
- В этой теме 1 ответ, 2 участника, последнее обновление 11 часов, 52 минуты назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
18 мая 2026 в 18:36 #37251
ВЫБРАТЬ
ЗаказПредварительныйТовары.Ссылка КАК Ссылка,
ЗаказПредварительныйТовары.Ссылка.ДатаПоставки КАК ДатаПоставки,
ЗаказПредварительныйТовары.Ссылка.ДатаПоставкиПоставщика КАК ДатаПоставкиПоставщика,
ЗаказПредварительныйТовары.Ссылка.СквознаяНумерацияПоставщика КАК СквознаяНумерацияПоставщика,
ЗаказПредварительныйТовары.Ссылка.Номер КАК Номер,
ЗаказПредварительныйТовары.Номенклатура КАК Номенклатура,
ЗаказПредварительныйТовары.Количество КАК Количество,
ЗаказПредварительныйТовары.КоличествоСобрано КАК КоличествоСобрано,
ЗаказПредварительныйТовары.Ссылка.НомерЗаказаКонтрагента КАК НомерЗаказаКонтрагента,
ЗаказПредварительныйТовары.Ссылка.НомерТорг12 КАК НомерТорг12,
ЗаказПредварительныйТовары.Номенклатура.Код КАК НоменклатураКод,
ЗаказПредварительныйТовары.Ссылка.Филиал КАК Филиал,
ЗаказПредварительныйСопоставление.ОсновнойЗаказ.НомерТорг12 КАК ОсновнойЗаказНомерТорг12
ИЗ
Документ.ЗаказПредварительный.Товары КАК ЗаказПредварительныйТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗаказПредварительныйСопоставление КАК ЗаказПредварительныйСопоставление
ПО ЗаказПредварительныйТовары.Ссылка = ЗаказПредварительныйСопоставление.ЗаказПредварительный
ГДЕ
ЗаказПредварительныйТовары.Ссылка.ДатаПоставки МЕЖДУ &ДатаПоставкиС И &ДатаПоставкиПо
И ЗаказПредварительныйТовары.Ссылка.Поставщик = &Поставщик
И ЗаказПредварительныйТовары.Номенклатура = &НоменклатураСГРУППИРОВАТЬ ПО
ЗаказПредварительныйТовары.Ссылка,
ЗаказПредварительныйТовары.Ссылка.ДатаПоставки,
ЗаказПредварительныйТовары.Ссылка.ДатаПоставкиПоставщика,
ЗаказПредварительныйТовары.Ссылка.СквознаяНумерацияПоставщика,
ЗаказПредварительныйТовары.Ссылка.Номер,
ЗаказПредварительныйТовары.Номенклатура,
ЗаказПредварительныйТовары.Количество,
ЗаказПредварительныйТовары.КоличествоСобрано,
ЗаказПредварительныйТовары.Ссылка.НомерЗаказаКонтрагента,
ЗаказПредварительныйТовары.Ссылка.НомерТорг12,
ЗаказПредварительныйТовары.Номенклатура.Код,
ЗаказПредварительныйТовары.Ссылка.Филиал,
ЗаказПредварительныйСопоставление.ОсновнойЗаказ.НомерТорг12″} -
18 мая 2026 в 18:36 #37252
Оптимизация запроса по 1С:
1. Убрать лишний GROUP BY, если нет агрегатных функций. В вашем запросе нет агрегатных функций (SUM, COUNT и т.п.), а группировка по всем полям фактически не нужна. Можно просто убрать GROUP BY.
2. Если нужны уникальные записи, используйте DISTINCT вместо GROUP BY.
3. Упростить выборку полей из ссылки. Вместо повторного обращения к ЗаказПредварительныйТовары.Ссылка.Поле лучше сделать отдельный JOIN с Документом.ЗаказПредварительный, чтобы не дублировать обращения.
4. Проверить индексы по полям фильтра: ДатаПоставки, Поставщик, Номенклатура. Если их нет — добавить.
5. Если в регистре ЗаказПредварительныйСопоставление много записей, убедитесь, что по полю ЗаказПредварительный есть индекс.
6. Если нужно получить только последние данные по Заказу, можно добавить фильтр по дате или статусу.
Переписанный запрос с учетом:
|ВЫБРАТЬ
| ЗПТовары.Ссылка КАК Ссылка,
| ЗП.ДатаПоставки,
| ЗП.ДатаПоставкиПоставщика,
| ЗП.СквознаяНумерацияПоставщика,
| ЗП.Номер,
| ЗПТовары.Номенклатура,
| ЗПТовары.Количество,
| ЗПТовары.КоличествоСобрано,
| ЗП.НомерЗаказаКонтрагента,
| ЗП.НомерТорг12,
| ЗПТовары.Номенклатура.Код КАК НоменклатураКод,
| ЗП.Филиал,
| ЗПС.ОсновнойЗаказ.НомерТорг12 КАК ОсновнойЗаказНомерТорг12
|ИЗ
| Документ.ЗаказПредварительный.Товары КАК ЗПТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПредварительный КАК ЗП
| ПО ЗПТовары.Ссылка = ЗП.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗаказПредварительныйСопоставление КАК ЗПС
| ПО ЗПТовары.Ссылка = ЗПС.ЗаказПредварительный
|ГДЕ
| ЗП.ДатаПоставки МЕЖДУ &ДатаПоставкиС И &ДатаПоставкиПо
| И ЗП.Поставщик = &Поставщик
| И ЗПТовары.Номенклатура = &НоменклатураЕсли уникальность нужна — добавьте DISTINCT после ВЫБРАТЬ.
Такой запрос:
— Убирает GROUP BY, т.к. он не нужен без агрегатов.
— Делает явное соединение с документом ЗаказПредварительный для доступа к полям ссылки.
— Сохраняет соединение с регистром сопоставления.
— Упрощает чтение и потенциально улучшает производительность.
Рекомендую проверить индексы по полям фильтра и соединениям.
Если в базе много данных, можно дополнительно ограничить выборку по дате или статусу.
Если нужна помощь с индексами — могу подсказать.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.