← Назад к вопросам
Зачем индексировать поля?
1.0 Junior🔥 191 комментариев
#Запросы и оптимизация#СУБД и хранение
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Зачем индексировать поля в 1С
Индексирование полей — критически важная оптимизация производительности БД, позволяющая ускорить поиск и фильтрацию данных в сотни раз.
Основное назначение
Индексы предназначены для:
- Ускорения поиска по полям
- Быстрой фильтрации данных
- Оптимизации сортировки
- Ускорения JOIN операций
- Снижения нагрузки на БД
Как работают индексы
Без индекса (полное сканирование):
Таблица: 1 000 000 записей
Поиск: WHERE Дата = 2025-01-15
Операции БД: 1 000 000 проверок
Время: 5+ секунд
С индексом (бинарный поиск):
Таблица: 1 000 000 записей
Поиск: WHERE Дата = 2025-01-15
Операции БД: ~20 проверок (log2 1000000)
Время: 0.01 секунды
Когда индексировать
Обязательно индексируй:
- Поля внешних ключей (ссылки на справочники)
- Поля фильтрации в запросах
- Поля сортировки (ORDER BY)
- Поля дат (Дата, ДатаНачала, ДатаОкончания)
- Поля номеров документов
Примеры:
Документ.ПриходнаяНакладная:
- Индекс на Дата
- Индекс на Поставщик
- Составной индекс (Поставщик, Дата)
Справочник.Товары:
- Индекс на Артикул
- Индекс на Наименование
- Индекс на Категория
Типы индексов
Простой индекс:
- По одному полю
- Быстро ищет по одному критерию
- Минимальные затраты
Составной индекс:
- По нескольким полям
- Оптимизирует сложные условия
- Порядок полей критичен
Уникальный индекс:
- Гарантирует отсутствие дубликатов
- Используется для ключей
Пример оптимизации
Медленный запрос без индексов:
Запрос = Новый Запрос("ВЫБРАТЬ
| ПН.Номер,
| ПН.Дата,
| К.Наименование,
| ПН.Сумма
|ИЗ
| Документ.ПриходнаяНакладная как ПН
|ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ
| Справочник.Контрагенты как К
|ПО
| ПН.Поставщик = К.Ссылка
|ГДЕ
| ПН.Дата >= @ДатаНачала
| И ПН.Дата <= @ДатаКонца
| И К.Категория = @Категория");
// Без индексов: 10+ секунд
Оптимизированный запрос с индексами:
Индекс 1: ПриходнаяНакладная (Дата, Поставщик)
Индекс 2: Контрагенты (Ссылка, Категория)
По этим индексам: 0.1 секунды (в 100 раз быстрее)
Минусы индексов
Затраты:
- Замедление INSERT, UPDATE, DELETE
- Потребление дискового пространства
- Требуется обновление индекса при изменении
Баланс:
3-5 индексов на таблицу = оптимально
10+ индексов = избыток
0 индексов = слишком медленно
Best Practices
1. Анализируй запросы:
- Профилировать реальные запросы
- Находить узкие места
- Индексировать по факту
2. Порядок полей в составных индексах:
Запрос: WHERE Поставщик = X AND Дата > Y
Хороший индекс: (Поставщик, Дата)
Плохой индекс: (Дата, Поставщик)
3. Удаляй неиспользуемые индексы:
- Анализировать статистику использования
- Удалять мёртвые индексы
- Экономить место
4. Мониторинг:
- Проверять фрагментацию
- Перестраивать индексы
- Анализировать производительность
Инструменты анализа
PostgreSQL:
- EXPLAIN для просмотра плана
- pg_stat_statements для статистики
MS SQL Server:
- Execution Plans
- Query Analyzer
Индексирование полей — основной инструмент оптимизации производительности БД в 1С, способный улучшить скорость в сотни раз.