你了解SQL的索引原理吗

发表于:2012-2-28 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Veda    来源:51Testing软件测试网采编

  第三:访问创建有聚集索引的表。

  聚集索引中,数据所在的数据页是叶级,索引数据所在的索引页是非叶级。原理和上述非聚集索引的查询差不多,由于记录是按聚集索引键值进行排序,即聚集索引的索引键值也就是具体的数据页。这种情况比起非聚集索引要简单很多,因为比非聚集索引少了一层节点查询。

  上篇文章的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、将该记录返回客户端。

  通过上面数据库访问索引的原理,我们就很容易解释聚集索引与非聚集索引的区别了,原理都一样,关键看什么场合应用什么索引了,下一篇我来总结一些不同场合最适合采用什么样的索引,不对之外多多指点。

相关链接:

你能说出SQL聚集索引和非聚集索引的区别吗?

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号