Skip to main content

Индексы

Ключевые характеристики:

  • Что такое индекс: Служебный объект БД, созданный на основе одного или нескольких полей

  • Главная задача: Ускорение поиска данных в СУБД (особенно на больших объемах)

  • Без индекса: Полное сканирование таблицы (Table Scan) — неэффективно

Виды индексов

Кластерный индексНекластерный индекс
АналогОглавление книги (порядок страниц = содержание)Алфавитный указатель в конце книги
Кол-во1 на таблицуМного на таблицу
СкоростьМаксимальная (данные сразу там)Высокая, но требует перехода по ссылке (найти запись в индексе, затем по ссылке перейти к данным)
Что хранитСами строки данных (таблица отсортирована)Копия ключевых полей + ссылка на строку. Существует отдельно от данных. Сам индекс хранится в одном месте в виде b-дерева, а данные — в другом
ВлияниеМеняет физический порядок храненияНе меняет физический порядок

Простая аналогия:

  • Таблица без кластерного индекса = куча бумаг в коробке. Чтобы найти что-то, надо перерыть всю коробку.
  • С кластерным индексом = бумаги подшиты в папку в строгом орядке.
  • Некластерный индекс = отдельный список с номерами листов, лежащий рядом с коробкой.

Управление индексами в 1С

ТипКак создаетсяКогда использовать
СистемныеАвтоматически платформой. Можно включить "Индексировать" у реквизита.Для часто фильтруемых полей. Несколько отмеченных реквизитов → отдельные индексы, а не один составной
Дополнительные (только для лицензии КОРП)Вручную в конфигураторе. Можно создать составной индекс (несколько полей).Для оптимизации конкретных медленных запросов. Порядок полей критичен

Важные ограничения:

  • СУБД может ограничивать кол-во полей (например, 16)
  • Нельзя включать: ХранилищеЗначения, строки неограниченной длины
  • Платформа предотвращает дублирование физических индексов

Мифы и правда

МифРеальность
«Чем больше индексов — тем лучше»Опасно! Каждый индекс замедляет запись, занимает место. Нужен баланс
«1С создаст все нужные индексы сама»Частично. Базовые — да. Для ваших запросов — нужны ручные настройки
«Поле в индексе = будет работать быстро»Недостаточно. Для составных важен порядок. Отбор должен начинаться с первого поля индекса
Настройка 'Индексировать' создаст составной индексСоздаёт отдельные индексы на каждое поле. Для составного — нужны дополнительные индексы (КОРП)
«Во все ВТ нужен индекс»Не всегда. Для малых таблиц полное сканирование быстрее. Смотреть план запроса

Критические нюансы

  1. Порядок измерений в регистрах

    • Влияет на структуру индекса

    • Главными факторами при формировании индекса являются:

      • Высокая селективность поля (способность эффективно сужать выборку);
      • Частота использования поля в условиях отбора (фильтрах запросов);
      • Порядок полей в индексе, так как СУБД может использовать индекс только с первого поля последовательно.

    Селективность и частота использования — являются важными и должны учитываться совместно при проектировании индексов

  2. Индексировать с доп. упорядочиванием

    • Для чего: Оптимизация динамических списков с отбором и сортировкой
    • Как работает: Создает индекс по реквизиту + плюс сортировочное поле (Код/Наименование для справочников, Дата и Ссылка для документов)
    • Когда использовать: Когда часты отборы по реквизиту с последующей сортировкой по умолчанию.

Ответы на ключевые вопросы

1. Почему запрос может не использовать индекс?

  • Отбор не начинается с первого поля составного индекса
  • Используются функции над полем
  • Выбирается большой % данных (оптимизатор решает, что сканирование быстрее)

2. Когда добавлять индекс во временную таблицу?

  • Когда таблица большая (тысячи+ строк)
  • И есть частые поиски/соединения по конкретным полям
  • Всегда проверять план запроса до/после

3. Что такое покрывающий индекс?

  • Покрывающий индекс (covering index) — это индекс, который содержит все поля, необходимые для выполнения конкретного запроса. В результате СУБД может получить ответ, обратившись только к индексу, без необходимости делать дополнительный переход к самой таблице

Материалы