Казалось бы все уже давно разжевано, однако об одном интересном факте мало кто знает - если кластерный индекс уникальный, то при создании неуникальных некластерных индексов, ключ кластерного индекса будет не только на листовом уровне дерева, но и в промежуточных узлах.
Об этом подробно написала 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.
Комментариев нет:
Отправить комментарий