数据库中聚簇索引与非聚簇索引的区别[图文]

来源:asp之家 时间:2012-02-25 19:38:23 

在《数据库原理》里面,对聚簇索引的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索引顺序与数据物理排列顺序无关。正式因为如此,所以一个表最多只能有一个聚簇索引。

不过这个定义太抽象了。在SQL Server中,索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。如下图:


非聚簇索引



聚簇索引


聚簇索引与非聚簇索引的本质区别到底是什么?什么时候用聚簇索引,什么时候用非聚簇索引?

这是一个很复杂的问题,很难用三言两语说清楚。我在这里从SQL Server索引优化查询的角度简单谈谈(如果对这方面感兴趣的话,可以读一读微软出版的《Microsoft SQL Server 2000数据库编程》第3单元的数据结构引论以及第6、13、14单元)。


一、索引块与数据块的区别

大家都知道,索引可以提高检索效率,因为它的二叉树结构以及占用空间小,所以访问速度块。让我们来算一道数学题:如果表中的一条记录在磁盘上占用 1000字节的话,我们对其中10字节的一个字段建立索引,那么该记录对应的索引块的大小只有10字节。我们知道,SQL Server的最小空间分配单元是“页(Page)”,一个页在磁盘上占用8K空间,那么这一个页可以存储上述记录8条,但可以存储索引800条。现在我 们要从一个有8000条记录的表中检索符合某个条件的记录,如果没有索引的话,我们可能需要遍历8000条×1000字节/8K字节=1000个页面才能 够找到结果。如果在检索字段上有上述索引的话,那么我们可以在8000条×10字节/8K字节=10个页面中就检索到满足条件的索引块,然后根据索引块上 的指针逐一找到结果数据块,这样IO访问量要少的多。

标签:聚簇索引,非聚簇索引
0
投稿

猜你喜欢

  • ASP写的汉字转换为UTF-8的一段代码

    2009-07-05 18:49:00
  • 条件注释使用指南[译]

    2009-03-23 17:41:00
  • 自动定时重启sql server回收内存

    2008-11-26 17:41:00
  • 利用XMLBean轻轻松松读写XML

    2008-09-04 11:25:00
  • 完美的渐变透明效果,支持Firefox

    2008-06-18 18:18:00
  • css中如何使div居中(垂直水平居中)

    2007-08-13 08:17:00
  • 像聪明女孩穿衣服那样设计网页文字

    2007-11-06 16:45:00
  • 细化解析:轻松掌握怎样测试 MySQL安装

    2009-01-14 11:54:00
  • 网页设计十大诀窍

    2007-10-19 13:03:00
  • 布局篇(1)—If you love css …

    2008-04-16 14:14:00
  • 将SQL Server中所有表的列信息显示出来

    2009-01-08 16:27:00
  • Oracle 忘记密码的找回方法

    2009-03-06 11:12:00
  • 《写给大家看的设计书》阅读笔记之色彩

    2009-07-30 12:45:00
  • xml xpath基础语法

    2008-01-21 12:46:00
  • 如何实现某一页面只让特定的用户浏览?

    2010-05-19 21:44:00
  • 符合网站标准的图片切换代码(天极软件)

    2008-02-20 08:23:00
  • 一个用Ajax做的用户名验证程序

    2007-10-21 20:40:00
  • ASP用户登录验证代码

    2008-05-15 12:49:00
  • 影响ORACLE汉字显示的字符集问题

    2008-06-13 16:49:00
  • CSS灵活运行注释带来的益处

    2008-04-21 13:51:00
  • asp之家 网络编程 m.aspxhome.com