Comments 4
которые добавляются как первое поле в каждый индекс (справедливо для типовых конфигураций.)
Не пробовали создать нужный индекс на уровне SQL?
Я разные пробовал . А какой индекс спасет положение с Вашей точки зрения?
(условие на _Fld628 - ОбластьДанныхОсновныеДанные ) добавляется в типовых конфигурациях всегда.
Если _Fld628 убрать из индекса это ухудшит план. Если сдвинуть вниз по индексу тут есть варианты. Можно конечно рассмотреть вариант когда _Fld628 нет совсем и в условиях тоже, но проблема с Index Seek по всей таблице останется, если не принимать дополнительных мер.
Альтернативные варианты типа IN , IF Exist могут дать лучший результат
Так они и так есть
1) который указан в статье InfoR18860_ByDims18897_STRRRR
СREATE UNIQUE NONCLUSTERED INDEX [_InfoR18860_ByDims18897_STRRRR] ON [dbo].[_InfoRg18860]
(
[_Fld628] ASC,
[_Fld18865] ASC,
[_Period] ASC,
[_Fld18861RRef] ASC,
[_Fld18863RRef] ASC,
[_Fld19363RRef] ASC,
[_Fld18862RRef] ASC
)
Если думаете что он не достаточно "селективный" я пробовал создавать (по сути поменял два поля местами)
CREATE NONCLUSTERED INDEX [_InfoR18860_MySuper_ByDims18897_STRRRR] ON [dbo].[_InfoRg18860]
(
[_Fld628] ASC,
[_Period] ASC,
[_Fld18865] ASC,
[_Fld18861RRef] ASC,
[_Fld18863RRef] ASC,
[_Fld19363RRef] ASC,
[_Fld18862RRef] ASC
)
Но MS SQL не берет его по умолчанию, а если принудить его хинтом план будет хуже (делал псевдозапрос 1С для SQL ) . Почему - это тема отдельной статьи, но причина гдето тут Myth: Put the most selective column leftmost (use-the-index-luke.com)
Партицированная дисциплина программиста в 1С