Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 дек 2024, 21:41

Индекс

Автор buzz484090, 13 ноя 2019, 12:25

0 Пользователей и 1 гость просматривают эту тему.

buzz484090

Привет всем!
Допустим, у нас есть регистр сведений "Мой" с измерением "Контрагент"(справочник Контрагент).Если этот регистр участвует в соединении, например:
....
    ИЗ
        ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ РгистрСвединей.Мой КАК РСМой
        ПО Вт.Контрагент = РСМой.Контрагент

Тогда индекс содержит все поля перечисленные в условии соединения и такой запрос будет работать оптимально.
Что если будет так?:
....
    ИЗ
        ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ РгистрСвединей.Мой КАК РСМой
        ПО Вт.КодКонтрагента = РСМой.Контрагент.Код


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

Спасибо за комментарии.

MuI_I_Ika

Во втором случае запрос так же будет строиться по индексу, так как поле Код индексируемое.

Но есть одно но. Поскольку соединение идет не напрямую по ссылке, а через, код то планировщик запроса будет вынужден неявно сделать еще одно левое соединение к полям справочника Контрагенты.

Так что воторой запрос будет делаться быстро, но медленнее первого.

Еще есть такое негласное правило. Каждая дополнительная точка в запросе влечет за собой дополнительное левое соединение. Так что надо стараться избегать таких ситуаций. Я вот об этом: "РСМой.Контрагент.Код"

buzz484090

Цитата: MuI_I_Ika от 13 ноя 2019, 15:26
Во втором случае запрос так же будет строиться по индексу, так как поле Код индексируемое.

Но есть одно но. Поскольку соединение идет не напрямую по ссылке, а через, код то планировщик запроса будет вынужден неявно сделать еще одно левое соединение к полям справочника Контрагенты.

Так что воторой запрос будет делаться быстро, но медленнее первого.

Еще есть такое негласное правило. Каждая дополнительная точка в запросе влечет за собой дополнительное левое соединение. Так что надо стараться избегать таких ситуаций. Я вот об этом: "РСМой.Контрагент.Код"
На самом деле вопрос чуть другой. Если есть код, в строковом виде, что быстрее, обратиться к справочнику "Контрагенты" и через ГДЕ получить Временную таблицу контрагентов и уже ее соединить с регистром или сразу второй вариант из темы?
И третий вариант - все равно?

MuI_I_Ika

Еще раз напишу более конкретно. Соединяться по коду неправильно.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск