0
akcent25
15.03.17
✎
10:20
|
Добрый день! Коллеги, не совсем могу понять почему выполняется частичное сканирование таблицы (оператор 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?
|
|