第三:访问创建有聚集索引的表。
聚集索引中,数据所在的数据页是叶级,索引数据所在的索引页是非叶级。原理和上述非聚集索引的查询差不多,由于记录是按聚集索引键值进行排序,即聚集索引的索引键值也就是具体的数据页。这种情况比起非聚集索引要简单很多,因为比非聚集索引少了一层节点查询。
上篇文章的username字段上建立了聚集索引,此时执行Select* From student Where username='1'时,查询过程是:
1、在sysindexes表查询INDID值为1,说明表中建立了聚集索;
2、从根出发,在非叶级节点中定位最接近1的值(枝节点),再查到其位于叶级页面的第n页;
3、在叶级页面第n页下搜寻值为1的条目,而这一条目就是数据记录本身;
4、将该记录返回客户端。
下图可做参考:
第四:怎样访问既有聚集索引、又有非聚集索引的数据表:
username字段上建立了聚集索引,cityid上建立了非聚集索引,当执行Select * From student Where cityid='0101'时,查询过程是:
1、在sysindexes表查询INDID值为2,说明有非聚集索引;
2、从根出发,在cityid的非聚集索引的非叶级节点中定位最接近0101的条目;
3、从上面条目下的叶级页面中查到0101的逻辑位置,是聚集索引的指针;
4、根据指针所指示位置,进入位于username的聚集索引中的叶级页面中找到0101数据记录;
5、将该记录返回客户端。
通过上面数据库访问索引的原理,我们就很容易解释聚集索引与非聚集索引的区别了,原理都一样,关键看什么场合应用什么索引了,下一篇我来总结一些不同场合最适合采用什么样的索引,不对之外多多指点。
相关链接: