聚族索引、非聚族索引、组合索引的含义和用途

作者:zhaohuabing 来源:呦呦鹿鸣,食野之芩 时间:2010-07-02 21:51:00 

 在学习和使用各种数据库的过程中,我们常常会遇到聚族索引、非聚族索引、组合索引的概念,这些索引对我们使用数据库,特别是查询的速度的影响是很大的,前几天公司里来了一个sybase的工程师,通过他的讲解,我终于弄清楚了这几个概念的真正含义,觉得虽然问题很小,但收获满大,在这里和大家一起分享一下。

 一、什么是索引

索引可以理解为我们小时候使用的汉语字典的索引,如果想在字典中查找一个字,一页一页地翻字典查找是非常慢的,但如果使用字典的索引进行查询,很快就可以查到了。数据库的索引也是类似的。

数据库中的索引一般是按照B树来组织的,叶结点指向真正的数据,B树的定义我这里就不介绍了,有兴趣的话可以去翻翻数据结构的书。

二、聚族索引

在这里还是用字典来进行类比,一般来说汉语字典中有几种索引,如拼音、偏旁、笔画等。字典本身的组织也是排序的,我记得一般是按照拼音排序的。这里的拼音就是聚族索引。也就是说聚族索引的组织顺序和数据本身的组织顺序是一致的,这也解释了数据库中只能定义一个聚族索引的原因,因为数据本身只能按一种方式进行排序。

那聚族索引有什么特别的好处呢,这个好处就是在数据库中执行查找一批数据的语句会比较快,因为数据已经按照聚族索引排好序了,很少的io操作就可以将数据从库中取出。好比你在字典中查找发音从从a到c的汉字,只需要查到a的开始页和c的结束页,中间的所有页都符合查询要求,不用再一页一页地查找。
    


图1 聚族索引

   三、非聚族索引

非聚族索引就好比字典里的偏旁、笔画索引,其索引组织顺序和数据组织顺序不一致,因此非聚族索引可以创建多个。当查找一条数据时,非聚族索引和聚族索引的效率相差不大,但查找一批数据(n)时,非聚族索引需要的io可能是聚族索引的n倍,因为非聚族索引需要一条一条地进行查找。


图2 非聚族索引

   四、组合索引

组合索引在索引的key中保存了所有组成该组合索引的字段,但只按第一个字段进行排序。因为索引key中保存的内容增多,因此组合索引需要的空间一般来说比单字段索引大。组合索引的好处是假如你的查询需要返回的数据字段都在组合索引的索引字段中,数据库将不会访问数据页,而直接返回索引中的字段值,可以加快查询速度。假如你的查询不满足这个条件,组合索引就是没有意义的,反而浪费了存储空间。

图3 组合索引

 最后出一道小题目,考考大家看懂没有:

假设表中一共有100条数据,索引的B树为三层,查询结果返回50条按照聚族索引排序的数据,不建索引查询、按照聚族索引查询、按照非聚族索引查询所需的io次数各是多少?

标签:聚族索引,非聚族索引,组合索引,sql,server
0
投稿

猜你喜欢

  • asp文章中随机插入网站版权文字的实现代码

    2011-04-15 11:11:00
  • js版sliderBar(滑动条)控件

    2008-10-18 15:59:00
  • 关于AJAX缓存数据

    2008-03-26 12:11:00
  • Oracle RMAN快速入门指南

    2010-07-18 12:50:00
  • 支持中文的Len, Left, Right函数

    2008-03-18 13:50:00
  • asp如何准确地获得一个整数?

    2010-07-07 12:25:00
  • 网友分享:Oracle数据库开发技术经验浅谈

    2009-04-22 13:11:00
  • 小三角的做法与使用

    2008-10-08 10:25:00
  • sqlserver数据库主键的生成方式小结(sqlserver,mysql)

    2012-08-21 10:25:45
  • 兼容Firefox的点击复制js代码

    2008-08-28 12:17:00
  • 高效优化博客的用户阅读体验

    2009-06-16 18:09:00
  • 返回首页的链接地址写法

    2008-10-22 13:38:00
  • jQuery点击改变链接的文本

    2010-03-19 18:11:00
  • 谈中国站长站的文章干扰码实现方法

    2007-10-13 11:13:00
  • 全局字体最佳实践

    2009-08-13 14:37:00
  • Perl下应当如何连接Access数据库

    2008-12-04 13:06:00
  • CSS Menu导航菜单下载网站整理

    2007-10-21 19:49:00
  • JavaScript 中为 Date 类实现 DateAdd 方法

    2008-04-03 16:19:00
  • 影响ORACLE汉字显示的字符集问题

    2008-06-13 16:49:00
  • 让css使网页图片半透明

    2007-02-03 11:39:00
  • asp之家 网络编程 m.aspxhome.com