1C Query Optimization Skill (Advanced Patterns)
Продвинутые паттерны оптимизации запросов. Базовые оптимизации (ВЫРАЗИТЬ, ПРЕДСТАВЛЕНИЕ, ВТ вместо подзапросов, ОБЪЕДИНИТЬ ВСЕ, индексы, СКД) - см. правило query-optimization-tips.md. Анти-паттерны (запрос в цикле, обращение через точку) - см. anti_patterns.md.
Validate Query via AI-EDT
Если сервер AI-EDT подключен (инструменты ai-edt доступны), проверяй оптимизированный запрос через validate_query - убедись, что после рефакторинга нет синтаксических/семантических ошибок. Для запросов СКД: dcsMode=true.
When to Use
Invoke this skill when:
- Working with complex multi-step data processing
- Optimizing joins and subqueries
- Implementing DCS reports
- Processing large datasets in portions
Temporary Tables - When to Use
Use temporary tables for:
- Complex multi-step data processing
- Joining data from multiple sources
- Reusing intermediate results
Join vs Subquery (basic choice)
// PREFERRED: Join (usually faster)
"ВЫБРАТЬ
| Заказы.Ссылка КАК Заказ,
| Контрагенты.ИНН КАК ИНН
|ИЗ
| Документ.ЗаказКлиента КАК Заказы
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО Заказы.Контрагент = Контрагенты.Ссылка"
// AVOID: Subquery in SELECT (N+1 problem)
"ВЫБРАТЬ
| Заказы.Ссылка КАК Заказ,
| (ВЫБРАТЬ К.ИНН ИЗ Справочник.Контрагенты КАК К
| ГДЕ К.Ссылка = Заказы.Контрагент) КАК ИНН
|ИЗ
| Документ.ЗаказКлиента КАК Заказы"
Avoid Aggregation in Subqueries
// SLOW: Subquery with aggregation
"ВЫБРАТЬ
| Номенклатура.Ссылка,
| (ВЫБРАТЬ СУММА(Остатки.Количество) ...) КАК Остаток
|ИЗ
| Справочник.Номенклатура КАК Номенклатура"
// FAST: Join with pre-aggregated data
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура,
| ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
| ПО Номенклатура.Ссылка = Остатки.Номенклатура"
Reference: ITS Query Optimization Standards