Блог О пользователеscherbinin

Регистрация

ЯнварьФевральМартАпрельМайИюньИюльАвгустСентябрьОктябрьНоябрьДекабрь
           
123 (1)45678910111213141516171819202122232425262728293031
 

Не очень известный факт о кластерном индексе


Казалось бы все уже давно разжевано, однако об одном интересном факте мало кто знает -- 
если кластерный индекс уникальный, то при создании неуникальных некластерных индексов, 
ключ кластерного индекса будет не только на листовом уровне дерева, но и в промежуточных узлах.

Об этом подробно написала 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.