Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Индексирование временных таблиц в запросе 1С 8.3 (8.2)

Разработчики 1С очень часто игнорируют использование конструкции «ИНДЕКСИРОВАТЬ ПО» в запросе.

Зачем нужно индексировать поля в запросе 1С 8.3, я расскажу ниже.

Использование в запросе

Как работает ИНДЕКСИРОВАТЬ ПО?

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

Т.е. система работает точно так же, как и обычные индексы 1С, только для временной таблицы.

Где и как нужно использовать ИНДЕКСИРОВАТЬ ПО ?

Конструкцию рекомендуется использовать по полям временных таблиц, по которым эта временная таблица будет соединяться с другими таблицами баз данных. Это существенно повышает скорость выполнения соединения таблиц.

Однако следует учесть один момент. Построение индекса временной таблицы также требует времени на выполнение. Поэтому целесообразно использовать конструкцию «ИНДЕКСИРОВАТЬ ПО», только если Вы знаете, что во временной таблице будет не 1-2 записи. В противном случае эффект может быть обратным — быстродействие от индексированных полей не компенсирует времени построения индекса.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 3 на “Индексирование временных таблиц в запросе 1С 8.3 (8.2)
  1. 1. Что значит «рекомендуется использовать по полям временных таблиц, по которым эта временная таблица будет соединяться с другими таблицами баз данных»? У меня есть левое соединение где в правой части — таблица базы данных. Зачем индексировать временную таблицу если при выборке будет проводиться поиск в правой таблице? То есть индекс временной таблицы в данном случае не функционален.
    2. Если я связываю 2 временные таблицы левым соединением, какую таблицу я должен индексировать?
    3. В приведённом примере — какой смысл индексировать таблицу по единственному полю, если в индексе получается такое же количество записей как в таблице и (следовательно) обход индекса при выборке занимает примерно столько же времени?
    Такое впечатление, что писали статью «чтоб было», не думая.

    Ответить

    • 1. Вы просто индексы готовить не умеете, потому как у Вас поверхностные знания общих принципов применения и работы индексов на платформах БД. Вообще есть определенные стандарты, согласно которым проектировщики платформ БД (вменяемые) следуют, иначе спроса на их платформу не будет.
      Так вот ответ на ваш вопрос — раз у вас в левом соединении временная таблица и по ней в самом запросе не идут поиск — значит у вас данные из левой таблицы выводятся в результат запроса (иначе зачем тогда Вам вообще левое соединение). А соответственно соединение по имеющимся записям в левой таблице может идти по ее (левой таблицы) индексу или по поиску (перебору) всех записей этой левой таблицы. И так по каждой строке правой. Да, если записей мало — то результат не так заметен, а то и даже… но когда записей много… Поймите — соединение, какое оно бы ни было — это соединение. И в данном случае можно всю таблицу перебирать, а можно по индексу сработать.
      2. Если нужно получить максимально быстро результат выборки, особенно если многократно с этими временными таблицами — то обе. При соединении (не важно каком именно) платформа БД при наличии индекса на поле таблице — работает всегда по индексу. Это всегда быстрее.
      3. Автор как раз понимает тему, это Вы не в теме и совершенно не представляете как работают индексы. Да, записей в индексе столько же будет, но принцип работы по индексу совершенно другой. Возможно, если у вас обе таблицы абсолютно аналогично отсортированы по полям соединения — то может и не такой эффект будет — но ведь это как правило не так…
      В общем вывод — статью писали думая — это Вы ответили, не подумав…

      Ответить

  2. Отличная статья! Я например до этой статьи вообще не знал что в запросах есть команда ИНДЕКСИРОВАТЬ ПО.
    Хотя с фифо и лифо пока не понятно, но статья дала много света, открыла новое понимание некоторых вещей, по которым я был в тупике. Большое спасибо автору.

    Ответить

Добавить комментарий: