Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Чем может быть вызван nonclustered index scan?  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Смотрю статистику по используемым индексам.
Для одного nonclustered index кол-во сканирований достаточно большое.
Вопрос, по какой причине вообще может появляться nonclustered index scan? Не припомню, чтобы видел такой элемент в планах выполнения?
Кластерный индекс на таблице есть.
14 авг 12, 14:25    [13009163]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Значит серверу достаточно данных из этого nonclustered индекса для выбраной стратегии построения плана выполнения.
14 авг 12, 14:31    [13009207]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37155
Может быть вызван примерно теми же причинам, что и clustered index scan.
14 авг 12, 14:31    [13009209]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Гавриленко Сергей Алексеевич
Может быть вызван примерно теми же причинам, что и clustered index scan.

Хорошо, переформулирую вопрос.
Какие изменения необходимо применить к таблице, чтобы вместо nonclustered index scan сиквел сервер стал производить nonclustered index seek.
Если предположить, что nonclustered index scan он выбрал потому, что в индексе есть все необходимые поля, однако те по которым идет поиск лежат в Included, то в этом случае достаточно перенести недостающие поля из Included в собственно индекс, верно?
14 авг 12, 14:37    [13009270]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37155
Kudep
Какие изменения необходимо применить к таблице, чтобы вместо nonclustered index scan сиквел сервер стал производить nonclustered index seek.
Например, задать селективное для этого индекса условие.
14 авг 12, 14:38    [13009283]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
nicescar
Member

Откуда:
Сообщений: 94
Kudep
Если предположить, что nonclustered index scan он выбрал потому, что в индексе есть все необходимые поля, однако те по которым идет поиск лежат в Included, то в этом случае достаточно перенести недостающие поля из Included в собственно индекс, верно?

Именно
14 авг 12, 14:38    [13009285]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
по какой причине вообще
Guest
Kudep,

давайте вы немного отвлечетесь от nonclustered/clustered и в том же режиме порассуждаете про что такое scan и что такое seek.
14 авг 12, 14:40    [13009305]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Гавриленко Сергей Алексеевич
Kudep
Какие изменения необходимо применить к таблице, чтобы вместо nonclustered index scan сиквел сервер стал производить nonclustered index seek.
Например, задать селективное для этого индекса условие.

причем здесь селективность? Если создать индекс с очень низкой селективностью, например, по полю bit, который в лучшем случае будет возвращать половину записей, и далее сделать выборку по этому полю, то мы все-равно получим nonclustered index seek. Т.е. скана все-равно не будет. И это при том, что данный пример совершенно утрированный. В реальности селективность всё же на порядок выше.
14 авг 12, 14:50    [13009382]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А актуальное число строк от ожидаемого сильно отличается?
14 авг 12, 14:55    [13009450]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
tpg
А актуальное число строк от ожидаемого сильно отличается?

сори, не понял, какое число строк?
14 авг 12, 15:23    [13009755]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37155
Kudep
Гавриленко Сергей Алексеевич
пропущено...
Например, задать селективное для этого индекса условие.

причем здесь селективность? Если создать индекс с очень низкой селективностью, например, по полю bit, который в лучшем случае будет возвращать половину записей, и далее сделать выборку по этому полю, то мы все-равно получим nonclustered index seek. Т.е. скана все-равно не будет. И это при том, что данный пример совершенно утрированный. В реальности селективность всё же на порядок выше.
Если очень постараться, то будет.

if object_id('tempdb..#t') is not null
    drop table #t
    
create table #t ( 
    id      int not null identity primary key clustered
    , flag  bit not null
)   
create index IX__t on #t ( flag )

insert #t (
    flag
)
select 1
union all select 0
union all select 0

select * from #t a where a.flag like '%1%'
14 авг 12, 15:42    [13009914]     Ответить | Цитировать Сообщить модератору
 Re: Чем может быть вызван nonclustered index scan?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Kudep
tpg
А актуальное число строк от ожидаемого сильно отличается?

сори, не понял, какое число строк?
Когда в графическом представлении плана выполнения наводите указатель мыши на выбраную операцию, всплывает текст "подсказки" в котором и можно посмотреть ожидаемое и актуальное число строк. То же самое можно увидеть в свойствах операции из контекстного меню плана.
15 авг 12, 06:29    [13012593]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить