首先要明确一个概念,在聚集索引的世界里索引就是数据,在最后的叶子索引键保存着对应的数据行。
举个例子:
表TestNonclusteredIndex
ID col1
1 4
2 5
3 6
4 7
其中ID列上有聚集索引,col1上是非聚集索引
执行下面语句:
select *
from TestNonclusteredIndex
where ID = 3;
SQL知道ID是聚集索引,因此就去聚集索引里去查找(查找和扫描是有区别的),当找到对应的键值的时候里面保存的是 "3 6"这条记录。
如果执行这条查询语句:
select *
from TestNonclusteredIndex
where col1 = 6
SQL知道col1上有非聚集索引,去索引里查找,找到的是6的非聚集索引键值和这条记录的聚集索引键值,因为没有数据(3 6),SQL就用这个聚集索引查找,就上面的例子一样就找到(3 6)这条数据;
其次,你要知道聚集索引是顺序的,到最后的数据页的时候,你知道第一条记录聚集索引是1难道聚集索引为2的记录不是它下一条,那么聚集索引为N的记录不是1之后的N-1条?我相信师弟不会一条一条的读进去分析的,哈哈...