Не очень известный факт о кластерном индексе
Казалось бы все уже давно разжевано, однако об одном интересном факте мало кто знает --
при наличии кластерного индекса (уникального или неуникального), при создании неуникальных некластерных индексов,
ключ кластерного индекса будет не только на листовом уровне дерева, но и в промежуточных узлах.
Об этом подробно написала Kalen Delaney в своем блоге:
http://sqlblog.com/blogs/kalen_delaney/archive/2010/03/07/more-about-nonclustered-index-keys.aspx
Не пересказывая г-жу Дилани, отмечу только, что это приводит к интересному эффекту --
при наличии уникального кластерного индекса по полю X и неуникального некластерного
индекса по полю Y, для запроса вида
Если же этот индекс сделать уникальным, то, как и ожидается, ключ кластерного индекса будет только
на листовом уровне, и index seek будет только по Y.
Замечание msLex -- у Дилани написано, что это будет происходить только в том случае, если кластерный индекс уникальный. Тесты же показывают, что это происходит в любом случае.
при наличии кластерного индекса (уникального или неуникального), при создании неуникальных некластерных индексов,
ключ кластерного индекса будет не только на листовом уровне дерева, но и в промежуточных узлах.
Об этом подробно написала Kalen Delaney в своем блоге:
http://sqlblog.com/blogs/kalen_delaney/archive/2010/03/07/more-about-nonclustered-index-keys.aspx
Не пересказывая г-жу Дилани, отмечу только, что это приводит к интересному эффекту --
при наличии уникального кластерного индекса по полю X и неуникального некластерного
индекса по полю Y, для запроса вида
select ... where Y = @param1 and X = @param2при использовании некластерного индекса, index seek будет по обоим полям -- Y, X, а не только по Y.
Если же этот индекс сделать уникальным, то, как и ожидается, ключ кластерного индекса будет только
на листовом уровне, и index seek будет только по Y.
Замечание msLex -- у Дилани написано, что это будет происходить только в том случае, если кластерный индекс уникальный. Тесты же показывают, что это происходит в любом случае.