Администрирование · 10 мин
Индексация таблиц 1С: что это такое и когда она нужна
Что такое индексация таблиц в 1С, как работают индексы, зачем нужна реиндексация и в каких случаях она ускоряет работу базы. Практическое руководство.
Индексация таблиц в 1С — это механизм ускорения поиска данных в информационной базе. Индекс представляет собой вспомогательную структуру, которая хранит отсортированные ссылки на строки таблицы: вместо полного перебора всех записей система находит нужные строки по индексу почти мгновенно. Без индексов любой запрос, отбор в списке или поиск документа превращается в последовательное чтение всей таблицы.
На практике отсутствие или повреждение индексов проявляется одинаково: база «тормозит», открытие журнала документов занимает десятки секунд, отчёты формируются минутами. При этом сама база может быть небольшой — проблема не в объёме данных, а в том, что система вынуждена сканировать таблицы целиком.
Индексы в 1С бывают двух уровней. Первый — индексы, которые платформа создаёт автоматически на уровне СУБД (MS SQL Server, PostgreSQL и других) на основе настроек конфигурации. Второй — служебная операция реиндексации в конфигураторе, которая перестраивает эти индексы и заодно восстанавливает повреждённые структуры файловой базы. Понимание разницы между ними важно для правильной диагностики проблем с производительностью.
Что такое индекс и как он работает
Индекс можно представить как алфавитный указатель в конце книги: чтобы найти тему, не нужно листать все страницы — достаточно посмотреть в указатель и сразу открыть нужную. Так же и СУБД: при наличии индекса по полю «Номер документа» поиск конкретного документа идёт по отсортированной структуре, а не перебором миллиона строк.
Технически индекс — это отдельная структура данных (обычно B-дерево), хранящая значения индексируемых полей и указатели на соответствующие записи таблицы. Чтение по индексу занимает доли секунды даже в больших таблицах. Расплата за скорость — дополнительное место на диске и замедление операций записи: при добавлении или изменении строки СУБД обновляет не только таблицу, но и все её индексы.
Поэтому индексировать всё подряд — плохая идея. Каждый лишний индекс увеличивает время проведения документов и запись элементов справочников. Оптимальная стратегия — индексировать только те поля, по которым реально выполняются отборы, поиск и соединения в запросах.
Какие индексы платформа 1С создаёт автоматически
Часть индексов платформа строит без участия разработчика. По умолчанию индексируются ключевые служебные поля: ссылка (уникальный идентификатор), код и номер, дата документа, владелец и родитель в справочниках, измерения регистров, регистратор в таблицах движений. Этого набора достаточно для типовых операций.
Кроме того, платформа автоматически индексирует реквизиты, у которых в конфигураторе установлено свойство «Индексировать» или «Индексировать с дополнительным упорядочиванием». Разработчик включает это свойство для полей, по которым пользователи часто ищут данные: например, «ИНН» у контрагента, «Артикул» у номенклатуры, «Организация» в документах.
Отдельный случай — критерии отбора и признак учета субконто: платформа строит по ним составные индексы, чтобы ускорить типовые отборы в журналах и оборотно-сальдовых ведомостях. Эти индексы не видны напрямую, но влияют на скорость работы стандартных отчётов.
Проверьте свойство «Индексировать» у реквизита в конфигураторе
Проанализируйте план запроса и количество индексов таблицы
Запустите реиндексацию через «Тестирование и исправление»
Реиндексация в конфигураторе: что делает эта операция
Реиндексация — это пункт в инструменте «Тестирование и исправление» (конфигуратор, меню «Администрирование»). При её выполнении платформа полностью перестраивает все индексы всех таблиц информационной базы. Для файловой базы это ещё и способ восстановления: если индексные страницы повреждены (например, после аварийного завершения работы или сбоя диска), реиндексация создаёт их заново.
Для клиент-серверных баз реиндексация из конфигуратора перестраивает индексы средствами СУБД. Однако на больших серверных базах администраторы чаще используют штатные средства самой СУБД: перестроение или реорганизацию индексов в MS SQL Server, команды REINDEX в PostgreSQL. Это даёт более тонкий контроль — можно обновлять только фрагментированные индексы, а не все подряд.
Важно понимать: реиндексация не ускоряет базу «волшебным образом». Она помогает в двух случаях — когда индексы физически повреждены и когда они сильно фрагментированы после массовых удалений и вставок. Если проблема в отсутствии нужного индекса по реквизиту, реиндексация её не решит: нужно включать индексирование в конфигураторе.
Как выполнить реиндексацию файловой базы
Операция выполняется из конфигуратора и требует монопольного доступа. Порядок действий одинаков для любой файловой базы, различия только в её размере и, соответственно, длительности процесса.
- 1Сделайте резервную копию: скопируйте файл 1Cv8.1CD или выполните выгрузку в dt через конфигуратор
- 2Завершите работу всех пользователей и фоновых сеансов с базой
- 3Откройте базу в конфигураторе и перейдите в «Администрирование» → «Тестирование и исправление»
- 4Установите флажок «Реиндексация таблиц информационной базы», остальные проверки при первом запуске можно отключить
- 5Выберите режим «Тестирование и исправление» и нажмите «Выполнить»
- 6Дождитесь окончания, изучите протокол и проверьте работу базы в пользовательском режиме
После завершения проверьте типовые операции, которые раньше выполнялись медленно: открытие журналов, поиск по реквизитам, формирование отчётов. Если скорость не изменилась, причина не в состоянии индексов — нужно анализировать запросы и настройки индексирования конкретных реквизитов.
Когда и как включать индексирование реквизитов
Если пользователи регулярно ищут или отбирают данные по конкретному реквизиту, а платформа его не индексирует по умолчанию, индекс нужно добавить вручную. Для этого в конфигураторе откройте свойства реквизита и установите свойство «Индексировать». После обновления конфигурации базы данных платформа создаст индекс физически.
Хорошие кандидаты на индексирование: реквизиты, по которым строятся отборы в динамических списках, поля связей между объектами, реквизиты, участвующие в соединениях и условиях запросов. Плохие кандидаты: редко используемые поля, реквизиты с малым числом различных значений (например, флажки «да/нет» — по ним индекс почти бесполезен), длинные строковые поля.
Как выбрать действие
После включения индексирования результат проверяется измерением: сравните время выполнения проблемного отбора или запроса до и после. В технологическом журнале или через план запроса в консоли СУБД видно, используется ли новый индекс оптимизатором.
Типичные ошибки и ограничения
Ещё одно ограничение: в файловом варианте индексы хранятся внутри единого файла 1Cv8.1CD, и их рост напрямую увеличивает его размер. На базах, приближающихся к практическим пределам файлового формата, лишние индексы ускоряют приближение к необходимости перехода на клиент-серверный вариант.
Наконец, индексы не решают проблемы архитектуры: неоптимальные запросы с обходом индексов (например, условия по функции от поля), избыточные соединения, отсутствие итогов по регистрам. Если после правильной индексации скорость всё равно не устраивает, следующий шаг — анализ планов запросов и замеров производительности.
Что важно запомнить
Индекс — структура для быстрого поиска, которую платформа строит автоматически по ключевым полям и по реквизитам с признаком «Индексировать». Реиндексация в конфигураторе перестраивает индексы и лечит повреждения файловой базы, но не заменяет правильную настройку индексирования. Любые операции с индексами выполняйте с резервной копией и в монопольном режиме.
Частые вопросы об индексации таблиц 1С
Как понять, что базе нужна реиндексация?
Характерные признаки: резкое замедление открытия списков и отчётов без роста объёма данных, ошибки чтения после аварийного завершения, странные результаты отборов. Если база файловая и недавно был сбой питания или диска — реиндексация с резервной копией является обоснованным первым шагом диагностики.
Как долго выполняется реиндексация?
Длительность зависит от размера базы и скорости диска: небольшая файловая база обрабатывается за минуты, база в десятки гигабайт — за часы. Точное время заранее предсказать нельзя, поэтому операцию планируют на нерабочее время и запускают в монопольном режиме.
Чем реиндексация отличается от обновления статистики?
Реиндексация физически перестраивает индексные структуры. Обновление статистики лишь сообщает оптимизатору СУБД актуальные сведения о распределении данных, чтобы он правильно выбирал план запроса. На серверных базах обе операции дополняют друг друга, и часто достаточно только обновления статистики.
Можно ли выполнять реиндексацию при работающих пользователях?
Нет. Из конфигуратора операция требует монопольного доступа — все сеансы должны быть завершены. В клиент-серверном варианте перестроение отдельных индексов средствами СУБД иногда возможно с меньшими блокировками, но это зависит от редакции и настроек конкретной СУБД.
Почему после добавления индекса документы стали проводиться медленнее?
Каждый индекс обновляется при записи данных: чем больше индексов у таблицы, тем больше работы при вставке и изменении строк. Если выигрыш в чтении не перекрывает потери на записи, такой индекс лучше отключить и искать другое решение — например, пересмотреть сам запрос.
Нужна ли реиндексация регулярно «для профилактики»?
Для файловых баз регулярная реиндексация без симптомов не обязательна. Для серверных баз регламент обслуживания (перестроение фрагментированных индексов и обновление статистики) обычно настраивается средствами СУБД по расписанию — это стандартная практика администрирования, а не мера от сбоев.