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

· 10 мин

Содержание

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

Типичная ситуация: бухгалтер открывает список контрагентов, вводит ИНН в строку поиска — и ждёт 20 секунд. В базе 40 тысяч записей, а СУБД перебирает их подряд, потому что по этому полю нет индекса. Настроить индексацию в 1С правильно — значит дать базе «оглавление» именно там, где по нему ищут, и не перегрузить запись лишними индексами.

Что такое индексация в 1С и зачем она нужна базе

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

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

Что даёт правильная индексация:

  • ⚡ быстрый отбор и поиск в списках по нужному полю;
  • 📊 ускорение запросов отчётов с условиями по реквизиту;
  • 🔒 меньше блокировок: запрос читает несколько строк, а не всю таблицу;
  • 📉 меньше нагрузки на диск и процессор сервера.

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

Виды индексов в 1С 8.3 и когда какой выбирать

Часть индексов платформа строит без вашего участия. Остальные вы задаёте свойством объекта.

Индексы, которые создаются автоматически

  • 🔑 по ссылке объекта — у справочников, документов, планов видов характеристик;
  • 🔑 по коду и наименованию справочника, по номеру и дате документа;
  • 🔑 по измерениям регистров — основной индекс регистра;
  • 🔑 по периоду и регистратору у регистров, подчинённых регистратору.

Ставить индекс на «Наименование» или «Номер» не нужно — он уже есть.

Значения свойства «Индексировать»

ЗначениеЧто создаётсяКогда применять
Не индексироватьНичегоПо полю не ищут и не отбирают
ИндексироватьИндекс по полю (и ссылке)Поиск, отбор, условия в запросах, соединения по полю
Индексировать с доп. упорядочиваниемИндекс по полю плюс поля упорядочивания объектаОтбор по полю в динамическом списке с сортировкой по умолчанию

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

Где свойство есть, а где нет

  • ✅ реквизиты справочников, документов, планов видов характеристик, планов счетов;
  • ✅ реквизиты табличных частей;
  • ✅ измерения и реквизиты регистров сведений и накопления;
  • ❌ ресурсы регистров — их не индексируют, по ним считают итоги.

Измерение регистра сведений уже входит в основной индекс. Но индекс работает слева направо: если ищете по второму измерению без первого, основной индекс не поможет. Для такого случая у измерения есть своё свойство «Индексировать».

Как включить индексацию в 1С: пошаговая инструкция

Перед изменением структуры сделайте резервную копию базы . Для файловой базы — копия каталога или выгрузка .dt, для серверной — бэкап средствами СУБД.

Шаг 1. Откройте реквизит в Конфигураторе

  1. Запустите базу в режиме Конфигуратор.
  2. Откройте конфигурацию: Конфигурация → Открыть конфигурацию.
  3. В дереве найдите объект, например справочник «Контрагенты», раскройте ветку «Реквизиты».
  4. Выделите реквизит и откройте палитру свойств (Alt+Enter).

Шаг 2. Задайте свойство

  1. Найдите в палитре группу «Использование», свойство Индексировать.
  2. Выберите «Индексировать» или «Индексировать с доп. упорядочиванием».
  3. Для реквизита табличной части действия те же: раскройте табличную часть и выделите её реквизит.

Шаг 3. Если конфигурация на поддержке

Типовая конфигурация закрыта для изменений. Варианты:

  • 🧩 добавить собственный реквизит в расширение и проиндексировать его там;
  • ✏️ включить возможность изменения (Конфигурация → Поддержка → Настройка поддержки) и снять с поддержки только нужный объект.

Второй путь усложнит каждое будущее обновление: придётся сравнивать и объединять изменённый объект. Решайте это вместе с тем, кто сопровождает базу.

Шаг 4. Обновите конфигурацию базы данных

  1. Нажмите F7 или Конфигурация → Обновить конфигурацию базы данных.
  2. Платформа покажет список изменений и выполнит реструктуризацию — перестроит таблицу с новым индексом.

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

На большой таблице (миллионы строк) построение индекса занимает от минут до часа. Не прерывайте процесс.

Как найти «узкие места» и понять, какой индекс нужен

Индекс «на всякий случай» вредит. Сначала найдите медленное место, потом лечите именно его.

Замер производительности

  1. Запустите базу из Конфигуратора в режиме отладки (F5).
  2. В Конфигураторе включите Отладка → Замер производительности.
  3. В пользовательском режиме повторите медленное действие: открыть список, провести документ , сформировать отчёт.
  4. Выключите замер. Строки с наибольшим временем укажут на конкретный запрос.

Что смотреть в тексте запроса

Индекс нужен, если поле регулярно стоит:

  • 🔍 в условии ГДЕ с равенством или диапазоном;
  • 🔗 в условии соединения ПО между таблицами;
  • 📑 в параметрах виртуальной таблицы регистра;
  • 🗂 в отборе динамического списка, которым пользуются каждый день.

Средства СУБД и технологический журнал

  • MS SQL Server — представления sys.dm_db_missing_index_details и sys.dm_db_missing_index_group_stats подсказывают, каких индексов не хватило оптимизатору.
  • PostgreSQL — расширение pg_stat_statements показывает самые тяжёлые запросы, а EXPLAIN ANALYZE — читается ли таблица целиком (Seq Scan).
  • Технологический журнал 1С (logcfg.xml) — события DBMSSQL или DBPOSTGRS с длительностью; по ним видно, какой запрос платформы долгий.

Подсказки СУБД не переносите в базу напрямую. Найдите по имени таблицы объект метаданных и поставьте индекс через свойство реквизита.

-- MS SQL Server: топ недостающих индексов по оценке оптимизатора
SELECT TOP 20
    d.statement AS table_name,
    d.equality_columns,
    d.inequality_columns,
    s.user_seeks,
    s.avg_user_impact
FROM sys.dm_db_missing_index_details d
JOIN sys.dm_db_missing_index_groups g ON g.index_handle = d.index_handle
JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle
ORDER BY s.user_seeks * s.avg_user_impact DESC;

Имена таблиц вида _Reference45 или _Document112 сопоставьте с объектами функцией ПолучитьСтруктуруХраненияБазыДанных() — её можно вызвать из внешней обработки.

Типичные ошибки при индексации в 1С

Диагностика: выберите симптом

Ещё одна частая ошибка — индексировать булевы реквизиты-флаги вроде «Согласован» или «Оплачен». У поля два значения, индекс почти ничего не отсекает, а место и время записи тратит.

Обслуживание индексов: реиндексация и регламент

Индексы со временем фрагментируются, статистика устаревает. План запроса становится хуже, хотя структура не менялась.

Файловая база: «Тестирование и исправление»

  1. Сделайте копию каталога базы.
  2. Откройте Конфигуратор, Администрирование → Тестирование и исправление.
  3. Отметьте «Реиндексация таблиц информационной базы». Чтобы заодно уменьшить файл, отметьте и «Сжатие таблиц информационной базы».
  4. Нажмите «Выполнить».

Операция идёт в монопольном режиме: пользователи должны выйти из базы. Файл 1Cv8.1CD на 10–20 ГБ обрабатывается десятки минут.

Тот же процесс без Конфигуратора выполняет утилита chdbfl.exe из каталога bin платформы. Запускайте её только при закрытой базе.

Клиент-серверная база: средства СУБД

В серверном варианте индексы обслуживает СУБД. Настройте регламент:

ОперацияMS SQL ServerPostgreSQLПериодичность
Обновление статистикиUPDATE STATISTICS, sp_updatestatsANALYZEежедневно ночью
Реорганизация индексовALTER INDEX … REORGANIZE—еженедельно при фрагментации 5–30%
Перестроение индексовALTER INDEX … REBUILDREINDEXеженедельно при фрагментации выше 30%
Очистка «мёртвых» строк—VACUUM (обычно autovacuum)постоянно
Очистка процедурного кэшаDBCC FREEPROCCACHE—после обновления статистики

Пороги 5% и 30% — общая рекомендация Microsoft для SQL Server, а не жёсткое правило. На SSD-дисках фрагментация влияет меньше, чем на HDD, и важнее свежая статистика.

-- MS SQL Server: фрагментация индексов в текущей базе
SELECT OBJECT_NAME(ips.object_id) AS table_name,
       i.name AS index_name,
       ips.avg_fragmentation_in_percent,
       ips.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') ips
JOIN sys.indexes i ON i.object_id = ips.object_id AND i.index_id = ips.index_id
WHERE ips.page_count > 1000
ORDER BY ips.avg_fragmentation_in_percent DESC;

REBUILD в редакции Standard блокирует таблицу на время перестроения, а DBCC FREEPROCCACHE на минуты замедляет все запросы. Запускайте план обслуживания ночью, когда в базе нет пользователей и не работают регламентные задания обмена.

Для PostgreSQL, поставляемого для 1С, держите включённым autovacuum и не отключайте его ради «скорости» — без него таблицы и индексы раздуваются.

Полнотекстовый поиск: отдельный индекс для поиска по словам

Строка поиска «по всем данным» работает не через индексы СУБД, а через собственный полнотекстовый индекс платформы. Его тоже нужно включить и поддерживать.

Как включить

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

В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3, УТ 11) есть и своя настройка в разделе Администрирование → Общие настройки. Там же обновление индекса назначается регламентным заданием.

Как поддерживать

  • 🔄 обновление индекса — регулярно, обычно раз в несколько минут или раз в час регламентным заданием;
  • 🧩 слияние индексов — раз в сутки, ночью: оно тяжелее обновления;
  • 🧹 «Очистить индекс » и построить заново — если поиск находит удалённые объекты или не находит новые.

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

Индексация в облаке: 1С:Fresh и аренда 1С

В облачной базе (1С:Fresh или аренда у партнёра) у вас нет Конфигуратора с правом менять структуру и нет доступа к СУБД. Значит:

  • 🚫 свойство «Индексировать» у типовых реквизитов вы не поменяете;
  • 🚫 реиндексацию и план обслуживания СУБД настраивает провайдер;
  • ✅ полнотекстовый поиск обычно включён, его обновление идёт по расписанию сервиса;
  • ✅ расширения в 1С:Fresh можно подключать после проверки сервисом — через них добавляют собственные реквизиты.

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

Практические примеры индексов для типовых задач

Поиск контрагента по ИНН

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

Свой реквизит «Номер заявки клиента» в документе

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

Регистр сведений «Цены по поставщику»

Измерения: Поставщик, Номенклатура. Обработка подбирает цены по номенклатуре без поставщика. Основной индекс начинается с Поставщика и не помогает. Поставьте индекс на измерение «Номенклатура».

Реквизит табличной части «Серия»

Таблица товаров документа на миллионы строк. Если по серии ищут только в редком отчёте, индекс не ставьте: он замедлит каждое проведение ради одного отчёта в месяц. Сначала проверьте замером, сколько реально занимает отчёт.

СлучайРешение
Поле в отборе списка каждый деньИндексировать
Отбор + сортировка в динамическом спискеИндексировать с доп. упорядочиванием
Поиск по не первому измерению регистраИндекс на это измерение
Редкий отчёт по большой табличной частиБез индекса, оптимизировать запрос
Булево поле, перечисление из 2–3 значенийБез индекса

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

Нужно ли переиндексировать базу после обновления конфигурации?
Нет. При реструктуризации платформа сама создаёт индексы для изменённых таблиц. Плановое обслуживание СУБД продолжайте по графику.
Можно ли поменять индексы без выгона пользователей?
Нет. Изменение индексов меняет структуру хранения, а обновление структуры требует монопольного доступа к базе.
Сколько места занимают индексы?
Обычно заметную часть размера базы: каждый индекс хранит копию значений поля и ссылку на строку. Точный размер по таблицам покажет СУБД, например отчёт «Disk Usage by Top Tables» в SQL Server.
Почему файловая база тормозит, даже если индексы в порядке?
У файлового варианта есть предел по числу пользователей и объёму. Когда работают 10 и более человек или файл растёт за десятки гигабайт, ощутимый выигрыш даёт переход на клиент-серверный вариант, а не новые индексы.
Поиск в строке списка использует полнотекстовый индекс?
Зависит от настроек формы и конфигурации. Если полнотекстовый поиск выключен, поиск в списке идёт запросом к СУБД, и скорость определяют обычные индексы по полям.