Pull to refresh

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)

Sign up to leave a comment.

Articles