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

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

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

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

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

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

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

Что такое индекс и как он ускоряет работу 1С

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

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

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

Какие индексы платформа создаёт автоматически

Большая часть необходимых индексов в 1С строится без участия разработчика и администратора. Платформа автоматически индексирует ключевые поля объектов, потому что они постоянно участвуют в поиске и соединениях таблиц.

  • Справочники: ссылка (внутренний идентификатор), код, наименование, владелец, родитель, пометка удаления.
  • Документы: ссылка, дата и номер, проведённость.
  • Регистры сведений и накопления: измерения, период, регистратор.
  • Планы счетов, виды расчёта, узлы планов обмена — аналогично по ключевым полям.

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

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

Если пользователи часто ищут или отбирают данные по нестандартному реквизиту — например, по артикулу в справочнике номенклатуры или по номенклатуре в табличной части документа, — для этого поля стоит включить индексацию. Делается это в конфигураторе.

Порядок действий
  1. 1
    Откройте конфигуратор и найдите нужный объект метаданных (справочник, документ, регистр).
  2. 2
    Выделите реквизит, измерение или графу и откройте палитру свойств.
  3. 3
    Установите свойство «Индексировать» в значение «Индексировать» или «Индексировать с доп. упорядочиванием».
  4. 4
    Сохраните конфигурацию и выполните обновление конфигурации базы данных (F7).
  5. 5
    Проверьте скорость типовой выборки по этому полю после обновления.

Значение «Индексировать с доп. упорядочиванием» добавляет в индекс сортировку по ссылке — это полезно, когда по реквизиту строятся динамические списки с упорядочиванием. Для простых отборов достаточно обычного варианта «Индексировать».

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

Полная реиндексация базы: что происходит и когда она нужна

Реиндексация — это пересоздание всех индексов базы заново. В файловом варианте она запускается через конфигуратор: меню «Администрирование» → «Тестирование и исправление», флаг «Реиндексация таблиц информационной базы». Процедура удаляет существующие индексы и строит их заново по фактическим данным таблиц.

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

Когда реиндексация оправдана

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

Когда реиндексация не поможет

Если база медленная из-за неоптимальных запросов в конфигурации, слабого сервера, сетевых задержек или отсутствия нужного индекса по реквизиту, реиндексация эффекта не даст. Она лишь пересоздаёт существующие индексы, но не добавляет новых и не чинит логику запросов.

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

Прежде чем запускать реиндексацию или добавлять индексы, стоит убедиться, что причина медленной работы связана с выборками данных. Характерные признаки: конкретные операции (поиск, открытие списка, отчёт) тормозят стабильно, при этом остальная работа идёт нормально; время выполнения растёт пропорционально объёму данных; в технологическом журнале видны длительные запросы к конкретным таблицам.

В клиент-серверном варианте диагностику проводят через план запроса в СУБД: если видно полное сканирование большой таблицы (Seq Scan, Table Scan) там, где ожидается поиск по индексу, — значит, подходящего индекса нет или статистика устарела. Устаревшая статистика лечится её обновлением, а не реиндексацией.

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

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

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

Поиск и открытие списков стали заметно быстрее

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

Время не изменилось — причина не в индексах

Целостность данных
Норма

Запросы возвращают полные и корректные результаты

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

Пропадают записи или появляются ошибки чтения

Размер базы после добавления индекса
Норма

Прирост умеренный и ожидаемый

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

База резко раздулась — индексов добавлено слишком много

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

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

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

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

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

Медленно работает отбор по конкретному реквизитуВключите индексацию этого реквизита в конфигураторе
Файловая база выдаёт ошибки чтения и странные результаты запросовСделайте копию и запустите реиндексацию через тестирование и исправление
Клиент-серверная база тормозит, а индексы на местеОбновите статистику и проверьте планы запросов средствами СУБД
Медленно работают отчёты со сложными соединениямиРазбирайте текст запроса — реиндексация здесь не поможет

Ограничения и безопасные границы самостоятельной работы

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

За пределами безопасной зоны — ручное создание индексов напрямую в СУБД для клиент-серверной базы. Платформа 1С управляет структурой таблиц сама, и сторонние индексы могут конфликтовать с обновлениями конфигурации. Такие решения принимают только после анализа планов запросов и согласования со специалистом по 1С и администратором СУБД.

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

Итог

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

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

Нужно ли регулярно запускать реиндексацию файловой базы?

Как профилактическую процедуру по расписанию — необязательно. Запускайте реиндексацию при появлении ошибок чтения, странных результатов запросов или заметной деградации скорости. Регулярное же обслуживание файловой базы сводится в основном к резервному копированию.

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

Реиндексация физически пересоздаёт индексы. Обновление статистики лишь сообщает СУБД актуальные данные о распределении значений в таблицах, чтобы оптимизатор выбирал правильные планы запросов. В клиент-серверных базах чаще нужна именно статистика, а не перестроение индексов.

Почему после добавления индекса база стала медленнее записывать документы?

Каждый индекс обновляется при записи данных. Если индексов много или они построены по часто изменяемым полям, проведение документов замедляется. Решение — оставить индексы только там, где есть реальные выборки по этим полям.

Можно ли прервать реиндексацию, если она идёт слишком долго?

Крайне нежелательно, особенно в файловом варианте: прерывание может оставить базу в повреждённом состоянии. Лучше заранее оценить объём базы, запланировать достаточный запас времени и иметь резервную копию на случай сбоя.

Поможет ли индексация ускорить отчёты?

Только если отчёт упирается в отбор по неиндексированному полю — тогда индекс по нему поможет. Если отчёт медленный из-за сложных соединений, виртуальных таблиц с неправильными параметрами или большого объёма обрабатываемых данных, нужно оптимизировать сам запрос.

Что такое полнотекстовый индекс в 1С и связан ли он с реиндексацией?

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