← Назад к вопросам

Зачем индексировать поля?

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С, способный улучшить скорость в сотни раз.

Зачем индексировать поля? | PrepBro