К статье
Практический материал

Администрирование · 10 мин

Индексация в 1С: что это и как она влияет на скорость работы

Разбираем, что такое индексация в 1С: индексы таблиц, полнотекстовый поиск, индексация базы SQL. Когда она ускоряет работу, а когда тормозит систему.

Индексация в 1С — это механизм ускорения поиска данных в таблицах информационной базы. Без индекса система вынуждена просматривать каждую запись по очереди (так называемое полное сканирование таблицы), что на справочниках в десятки тысяч элементов и документах за несколько лет приводит к заметным «подвисаниям». С индексом 1С находит нужную строку почти мгновенно, как читатель находит главу по оглавлению, а не листая всю книгу.

Термин «индексация» в контексте 1С используется в трёх разных значениях, и их часто путают. Первое — индексы таблиц базы данных, которые платформа создаёт автоматически или разработчик задаёт в конфигураторе. Второе — полнотекстовый поиск по данным, который требует отдельной индексации и обновления индекса. Третье — обслуживание индексов на уровне СУБД (MS SQL Server, PostgreSQL), которое выполняет администратор базы данных.

Понимание того, какой вид индексации имеется в виду, важно для диагностики проблем: медленный отбор в списке документов — это одна история, долгий поиск по подстроке в наименованиях — совсем другая. Ниже разберём каждый сценарий и дадим практические рекомендации.

Как устроены индексы таблиц в 1С

Каждая таблица справочника, документа или регистра в базе 1С хранится на диске как упорядоченный набор строк. Когда пользователь открывает список с отбором по контрагенту или выполняется запрос с условием ГДЕ Номенклатура = &Номенклатура, системе нужно найти подходящие записи. Индекс — это отдельная структура, где значения поля отсортированы и связаны с указателями на строки таблицы, поэтому поиск идёт по дереву значений, а не перебором.

Платформа 1С автоматически создаёт индексы для ключевых полей: ссылок, кодов, номеров документов, дат в журналах, измерений регистров. Дополнительно разработчик может включить индексирование для любого реквизита — для этого в конфигураторе у реквизита есть свойство «Индексировать» (в старых версиях — отдельное свойство, в новых — выбор варианта индексирования, включая «Индексировать с доп. упорядочиванием»).

Важно понимать обратную сторону: каждый индекс занимает место на диске и замедляет запись. При проведении документа или добавлении элемента справочника система обновляет не только таблицу, но и все её индексы. Поэтому индексировать «всё подряд» — плохая стратегия: чтение ускорится незначительно, а запись и обмены данными начнут тормозить.

Когда стоит включать индексацию реквизита

Индексация реквизита оправдана, если по этому полю регулярно выполняются отборы, поиск или соединения в запросах. Типичные кандидаты: реквизит «Организация» в документах многофирменной базы, «Склад» в товарных документах, «Договор» при частых отчётах по взаиморасчётам, штрихкод или артикул в справочнике номенклатуры.

Обратная ситуация — поля, по которым никто не ищет: комментарии, описания, служебные строковые реквизиты. Индекс по ним только раздувает базу. Ещё хуже индексировать поля с низкой селективностью, например булево «ПометкаУдаления» или признак с двумя-тремя значениями: такой индекс почти не сокращает объём просматриваемых данных, а стоимость его поддержания остаётся.

Маршрут решения

Как выбрать действие

По полю регулярно делают отбор в списках или условия в запросахВключите индексацию реквизита в конфигураторе
Поле текстовое, длинное и по нему ищут только подстрокойИндекс не поможет — рассмотрите полнотекстовый поиск
Запрос медленный, но индекс по полю уже естьПроверьте план запроса и актуальность статистики на СУБД
Поле используется только для вывода на экранИндексация не нужна, оставьте как есть

После изменения свойства «Индексировать» требуется обновление конфигурации базы данных — платформа сама создаст индекс физически. На больших таблицах это может занять заметное время и потребовать монопольного доступа, поэтому планируйте такие изменения на нерабочие часы.

Полнотекстовый поиск и его индексация

Отдельный механизм — полнотекстовый поиск, который включается в режиме Предприятия через меню «Администрирование → Полнотекстовый поиск». Он позволяет искать по произвольным словам в текстах: наименованиях, описаниях, комментариях, содержимом присоединённых файлов. Обычные индексы для такого поиска бесполезны — они работают только при сравнении значения целиком или с начала строки.

При включении механизма выполняется первичная индексация — система проходит по всем данным и строит поисковый индекс. В крупной базе это длительная операция, которая может идти часами и нагружать сервер. После этого индекс нужно поддерживать: есть два режима — обновлять индекс автоматически по расписанию (регламентным заданием) или вручную кнопкой «Обновить индекс».

Порядок включения полнотекстового поиска
  1. 1
    Откройте Администрирование → Полнотекстовый поиск и разрешите использование механизма
  2. 2
    Запустите первичное создание индекса в нерабочее время и дождитесь завершения
  3. 3
    Настройте расписание автоматического обновления индекса (обычно ночью или раз в несколько часов)
  4. 4
    Проверьте поиск по заведомо существующему слову из описания или комментария

Если пользователи жалуются, что поиск «не находит» свежие документы — почти всегда причина в устаревшем индексе: данные добавились, а регламентное обновление ещё не отработало или отключено. Проверьте расписание задания и журнал его выполнения.

Индексация на уровне СУБД: реиндексация и статистика

В клиент-серверном варианте 1С (MS SQL Server, PostgreSQL) со временем индексы фрагментируются: страницы данных оказываются разбросаны по диску, и чтение замедляется даже при наличии индекса. Для этого существует регламентная операция реиндексации — перестроение индексов (в MS SQL это команды ALTER INDEX ... REBUILD или REORGANIZE). Одновременно обновляют статистику, которую оптимизатор СУБД использует для выбора плана запроса.

sql
ALTER INDEX ALL ON _Document123 REBUILD WITH (ONLINE = ON);

Дополнительно в 1С есть встроенный механизм: в конфигураторе в разделе «Администрирование → Параметры информационной базы SQL» можно настроить автоматическую реиндексацию и обновление статистики по расписанию. Альтернатива — план обслуживания средствами самой СУБД, который обычно гибче и предпочтительнее для крупных баз.

Как понять, что проблема именно в индексах

Характерные признаки нехватки индекса: отбор в списке документов выполняется секундами или минутами, отчёт «думает» при фильтрации по конкретному реквизиту, а при снятии отбора всё открывается быстро. Признаки фрагментации — постепенная деградация скорости: база работала нормально, но за месяцы стала медленнее при неизменном объёме операций.

Для точной диагностики используют технологический журнал платформы (события DBMSSQL/DBPOSTGRS с длительностью запросов) и план выполнения запроса в консоли СУБД. Если в плане видно Scan (полное сканирование) по большой таблице там, где ожидался Seek (поиск по индексу) — значит, подходящего индекса нет или статистика устарела.

Контрольные точки

Как проверить результат

Скорость отбора в списке после добавления индекса
Норма

Отбор выполняется за доли секунды

Тревожный признак

Время не изменилось — вероятно, индекс не используется или проблема в другом

Полнотекстовый поиск по свежему документу
Норма

Документ находится после обновления индекса

Тревожный признак

Не находится — регламентное задание обновления не работает

План запроса в СУБД
Норма

Index Seek по нужному полю

Тревожный признак

Index Scan или Table Scan по большой таблице

Типичные ошибки при работе с индексацией

Самая распространённая ошибка — массовое включение индексации «на всякий случай». Каждый лишний индекс замедляет запись, увеличивает размер базы и время реиндексации. Вторая ошибка — ожидание, что индекс ускорит поиск по подстроке вида ПОДОБНО "%текст%": при ведущем символе процента обычный индекс не используется в принципе.

Типичные ошибки
01
Индексация всех реквизитов подряд — замедляет запись и раздувает базу без выигрыша в поиске
02
Ожидание, что индекс ускорит поиск по подстроке с % в начале — такой поиск индекс не использует
03
Отключённое регламентное обновление полнотекстового индекса — поиск перестаёт находить новые данные
04
Реиндексация в рабочее время — блокировки и жалобы пользователей на зависания
05
Изменение индексов напрямую в СУБД в обход конфигуратора — рассинхронизация структуры и ошибки при обновлении

Отдельно предупредим: не создавайте и не удаляйте индексы таблиц 1С напрямую средствами SQL. Платформа хранит описание структуры в метаданных, и ручные вмешательства приводят к ошибкам при обновлении конфигурации и труднодиагностируемым сбоям. Все изменения индексов выполняйте через конфигуратор.

Частые вопросы об индексации в 1С

Индексация замедляет запись данных — это правда?

Да. Каждый индекс нужно обновлять при добавлении или изменении строки. На таблицах с несколькими лишними индексами проведение документов и загрузка данных замедляются ощутимо. Поэтому индексируют только поля, реально участвующие в отборах и соединениях.

Чем индексация отличается от полнотекстового поиска?

Обычный индекс ускоряет точное сравнение значения поля (равно, больше, начинается с). Полнотекстовый поиск строит отдельный индекс по словам и позволяет находить документы по произвольным фразам в текстах, включая морфологию. Это разные механизмы, которые дополняют друг друга.

Как часто нужно делать реиндексацию базы на SQL Server?

Универсальной нормы нет: частота зависит от интенсивности изменения данных. На практике для активно используемых баз реиндексацию и обновление статистики планируют еженедельно или ежедневно в ночное окно, ориентируясь на степень фрагментации индексов.

Почему поиск перестал находить новые документы?

Полнотекстовый индекс не обновляется мгновенно — он пополняется регламентным заданием по расписанию или вручную. Проверьте, включено ли задание обновления индекса и когда оно последний раз успешно выполнялось, затем запустите обновление принудительно.

Можно ли включить индексацию реквизита без программиста?

Нет, свойство «Индексировать» меняется только в конфигураторе, причём в типовой конфигурации на поддержке это потребует снятия объекта с полной поддержки. Если база типовая, корректнее согласовать доработку со специалистом, чтобы не усложнить будущие обновления.

Нужна ли реиндексация для файловой базы 1С?

Для файлового варианта отдельной реиндексации средствами СУБД нет, но помогает тестирование и исправление информационной базы с включённой реиндексацией таблиц, а также периодическая выгрузка и загрузка базы через dt, которая физически перестраивает файл данных.

Итог

Что важно запомнить

Индексация в 1С ускоряет поиск за счёт вспомогательных структур, но замедляет запись. Включайте индексы только для полей, реально участвующих в отборах, поддерживайте полнотекстовый индекс регламентным заданием, а на клиент-серверных базах регулярно выполняйте реиндексацию и обновление статистики в нерабочее время. Изменения структуры индексов делайте только через конфигуратор.