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

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

Как ускорить поиск в 1С: практическое руководство

Как ускорить поиск в 1С: полнотекстовый поиск, индексы, настройка запросов и регистров. Практические шаги, типичные ошибки и способы проверки результата.

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

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

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

Определите, какой именно поиск тормозит

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

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

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

Проверить настройки динамического списка и индексы реквизита

Полнотекстовый поиск не находит данныеИндекс устарел или отключён

Проверить состояние полнотекстового поиска в разделе администрирования

Поиск медленный у всех пользователейПроблема на сервере или в запросах

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

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

Проверить канал связи, антивирус и версию платформы

Включите и настройте полнотекстовый поиск

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

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

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

Настройка полнотекстового поиска
  1. 1
    Откройте Администрирование — Обслуживание — Полнотекстовый поиск
  2. 2
    Включите полнотекстовый поиск и запустите полное обновление индекса
  3. 3
    Настройте расписание регламентного задания обновления индекса
  4. 4
    Проверьте поиском свежий документ после очередного обновления
  5. 5
    Убедитесь, что задание выполняется без ошибок в журнале регистрации

Ускорьте поиск в полях ввода и списках справочников

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

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

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

Проверьте индексы и запросы в доработках

Если база дорабатывалась, медленный поиск часто живёт в самописных запросах. Типичные проблемы: соединение таблиц без индексированных полей, отбор по выражению (например, функция над полем в условии), выборка «ВЫБРАТЬ *»-стиля с лишними полями, виртуальные таблицы без параметров отбора. Такие запросы хорошо работают на тестовой базе и деградируют по мере роста данных.

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

Частый приём ускорения — переписать условие так, чтобы поле таблицы стояло «чисто»: вместо ПОДСТРОКА(Наименование, 1, 5) = &Фрагмент искать Наименование ПОДОБНО &Фрагмент + «%». Вместо отбора по функции от даты — по диапазону дат. Эти изменения позволяют СУБД использовать индекс.

bsl
// Плохо: поиск по подстроке, индекс не используется
ГДЕ Наименование ПОДОБНО &"%" + Фрагмент + "%"

// Лучше: поиск с начала строки, индекс работает
ГДЕ Наименование ПОДОБНО &Фрагмент + "%"

Оптимизируйте поиск документов и работу с журналами

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

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

Если поиск по строке в табличной части или в форме списка выполняется встроенным диалогом (Ctrl+F), помните: он ищет только среди уже загруженных строк. Для поиска по всей таблице нужны отборы или полнотекстовый поиск.

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

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

Полнотекстовый поиск не находит новые документыПроверьте расписание обновления индекса и ошибки регламентного задания
Медленно ищет контрагента при вводе в полеПереключите способ поиска на начало строки и проверьте индекс наименования
Тормозит отбор в журнале документовОграничьте период и уберите отборы по неиндексированным реквизитам
Медленный самописный запросСнимите план запроса на СУБД и добавьте индекс или перепишите условие
Медленно у всех при любых операцияхПроверяйте сервер: память, диски, tempdb, регламенты СУБД

Проверьте серверную инфраструктуру

Никакая настройка поиска не поможет, если серверу не хватает ресурсов. Для клиент-серверной 1С критичны: объём оперативной памяти под СУБД, быстрые диски под базу и tempdb, регулярное обновление статистики и обслуживание индексов на стороне СУБД. Фрагментированные индексы и устаревшая статистика заставляют оптимизатор выбирать плохие планы даже для простых запросов поиска.

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

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

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

Как проверить, что поиск стал быстрее

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

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

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

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

Время поиска контрагента в поле ввода
Норма

Отклик в пределах 1–2 секунд

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

Ожидание больше 5 секунд на типовом запросе

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

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

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

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

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

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

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

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

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

Выполняется по расписанию без ошибок

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

Ошибки в журнале регистрации или задание не запускается

Итог

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

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

Частые вопросы

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

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

Можно ли ускорить поиск, не привлекая программиста?

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

Чем поиск по началу строки лучше поиска по подстроке?

Условие «начинается с» позволяет СУБД использовать индекс по полю и читать только нужный диапазон записей. Условие «содержит» (с % в начале шаблона) заставляет просматривать все строки таблицы, что на больших справочниках занимает секунды и десятки секунд.

Стоит ли индексировать все реквизиты, по которым хоть иногда ищут?

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

Файловая база тормозит при поиске — поможет ли переход на клиент-сервер?

Как правило, да, особенно при одновременной работе более 5–10 пользователей и объёме данных в десятки гигабайт. Клиент-серверный вариант переносит выполнение запросов на СУБД с индексами и кэшем. Но сначала стоит исключить локальные причины: медленный диск, антивирус, сетевой доступ к файлу базы.

Как понять, что проблема в сервере, а не в конфигурации?

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