19.1.23

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

Ray D's blog

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



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

Комментариев нет:

Отправить комментарий