Добрый день! Коллеги, не совсем могу понять почему выполняется частичное сканирование таблицы (оператор Where) при выполнении запроса к таблице оборотов. Дано: Регистр накопления ЗаявкиНаВключение - тип Обороты, Состав измерений: Заявка, Сценарий, ЦФО. Делаю следующий запрос:
"ВЫБРАТЬ
ЗаявкиНаВключениеСуммыВБюджетОбороты.Заявка КАК Заявка
ИЗ
РегистрНакопления.СГМ_ЗаявкиНаВключениеСуммыВБюджет.Обороты(&Начало, &Конец, , Заявка = &Заявка)) КАК ЗаявкиНаВключениеСуммыВБюджетОбороты".
Далее смотрю что происходит в Profiler, и вижу что при выполнении запроса MS SQL применяет следующие операторы:
"Clustered Index Seek(OBJECT:([1C_Test].[dbo].[_AccumRgTn33762].[_Accum33762_ByDims_TRRRRRRRRRN] AS [T2]), SEEK:(([T2].[_Period], [T2].[_Fld33751RRef]) >= ([ ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! P1], [ ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! P3]) AND [T2].[_Period] < [ ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! P2]), WHERE:([1C_Test].[dbo].[_AccumRgTn33762].[_Fld33751RRef] as [T2].[_Fld33751RRef]=[ ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! P3])".
Как мне казалось, исходя из строения индексов таблицы Обороты (Период + Измерение1 + ... + ИзмерениеN (Кластерный) + Splitter.), планировщик SQL должен был сделать только поиск (Seek) без частичного сканирования (WHERE). Данное поведение системы приводит к излишнему блокированию данных в таблице из за чего нарушается параллельность работы пользователей. Коллеги, почему в данном случае применяется оператор Seek WHERE?