В каком случае используешь индексы в запросах · 1C Developer — JobPilot

В каком случае используешь индексы в запросах

1C Developer · 20%
Вопрос 3974 / #
Пример ответа

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

Ключевые идеи:
  • Индексы применяю для полей, по которым часто выполняются условия WHERE, JOIN или ORDER BY, чтобы СУБД использовала индексный доступ вместо полного сканирования таблицы.
  • В 1С индексы настраиваю через конфигуратор для реквизитов справочников, документов или регистров, если запросы к ним замедляют работу, особенно при больших объёмах данных.
  • Избегаю избыточных индексов на редко используемые поля или с малым селективностью, так как они замедляют вставку и обновление данных без выигрыша в производительности.
Пример: Например, в запросе к справочнику "Номенклатура" с фильтром по полю "Артикул" и сортировкой по "Наименование" я создал бы индексы на оба поля, если они часто используются в отчётах или формах, что ускорило бы выборку с 2 секунд до 200 мс в тестовой базе на 100 тыс. записей.
Пример запроса в 1С, где индексы критичны для производительности, с комментариями по их применению
1C
// Запрос к справочнику Номенклатура с фильтрацией и сортировкой
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
    |    Номенклатура.Ссылка,
    |    Номенклатура.Наименование,
    |    Номенклатура.Артикул
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Артикул = &Артикул // Индекс на поле Артикул ускоряет поиск
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура.Наименование // Индекс на поле Наименование ускоряет сортировку";
Запрос.УстановитьПараметр("Артикул", "ABC123");
Результат = Запрос.Выполнить();
Вопросы для интервьюера:
  • Как вы определяете, какие поля нужно индексировать в 1С?Я анализирую планы запросов в СУБД, например через SQL Server Profiler или встроенные средства 1С, чтобы найти медленные операции, и добавляю индексы на поля в условиях WHERE, JOIN или ORDER BY, которые вызывают полное сканирование.
  • Какие ограничения или риски есть при использовании индексов в 1С?Основные риски: замедление вставки и обновления данных из-за поддержки индексов, увеличение размера базы, и возможные блокировки при конкурентном доступе. Я балансирую, индексируя только ключевые поля и тестируя в нагрузке.
Практический совет (на неделю):
  1. Проанализируйте медленные запросы в вашей базе 1С через средства мониторинга СУБД и добавьте индексы на часто фильтруемые или сортируемые поля, но избегайте индексов на поля с низкой селективностью, например, на флаги.
  2. Регулярно пересматривайте индексы после изменений в конфигурации или росте данных, чтобы удалить неиспользуемые и оптимизировать существующие, используя встроенные отчёты 1С по производительности.
1C Developer
Общий
20%
Навигация
В чем разница между HTTP и Web-сервисами
Следующий: В каких проектах хочешь принять участие
Предыдущий: В чем разница между HTTP и Web-сервисами

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.