`

数据库索引原理理解 (转)

 
阅读更多

以前对数据库的理解总是停留在使用的阶段,没有去研究过深层次的东西,这两天正好有空(其实也是工作需要),看了一下数据库索引的一些基础的东西,希望通过这篇博文,整理一下自己的思路。
1.什么是索引?
我想这个用过数据库的人都应该知道了,索引类似于书的目录,主要用于提高查询效率,也就是按条件查询的时候,先查询索引,再通过索引找到相关的数据,索引相当于记录了对某个关键词,指定到不同的文件,或者文件里的不同位置,当然索引自身也是通过文件来保存的。
2.索引的类型
有两种基本的索引结构,也就是索引文件的保存方式,一个是顺序索引,就是根据值的顺序排序的(这个文件里面的值,也就是为其建索引的字段值,是顺序的放在索引文件里面),另外一个是散列索引,就是将值平均分配到若干散列桶中,通过散列函数定位的。
2.1.顺序索引
顺序索引下面又有很多概念。
如果被索引的字段本身按照一定的顺序排序,那么这种索引叫做聚集索引。否则叫做非聚集索引。
如果被索引的字段的每个值都有一个索引与其对应,那么这种索引叫做稠密索引,否则叫做稀疏索引。
顺序索引分为两类,单级索引(不怎么用)和多级索引(通常是B+树,大量使用)。
单级索引就是把所有的索引字段以及对应的文件位置按顺序一个个的排列出来,这种索引查找起来比较慢,因为是顺序存储的,可以使用二分查找法,但是总体来说效率不高,这种索引是最基础的索引,一般不用,ORACLE里面好像不支持这种索引。
多级索引实际上就是在单级索引之上再加索引(稀疏索引),也就是指向索引的索引,二级索引上面还可以再加三级索引,可以不停的加,加到最后最上层只剩下一个节点(根节点),就成了一个树状结构了。
我们经常听到B+树就是这个概念,用这个树的目的和红黑树差不多,也是为了尽量保持树的平衡,当然红黑树是二叉树,但B+树就不是二叉树了,节点下面可以有多个子节点,数据库开发商会设置子节点数的一个最大值,这个值不会太小,所以B+树一般来说比较矮胖,而红黑树就比较瘦高了。
关于B+树的插入,删除,会涉及到一些算法以保持树的平衡,这里就不详述了。ORACLE的默认索引就是这种结构的。
如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,而使用复合索引因为索引本身就对应到两个字段上的,效率会有很大提高。
2.2 散列索引
第二种索引叫做散列索引,就是通过散列函数来定位的一种索引,不过很少有单独使用散列索引的,反而是散列文件组织用的比较多。
散列文件组织就是根据一个键通过散列计算把对应的记录都放到同一个槽中,这样的话相同的键值对应的记录就一定是放在同一个文件里了,也就减少了文件读取的次数,提高了效率。
散列索引呢就是根据对应键的散列码来找到最终的索引项的技术,其实和B树就差不多了,也就是一种索引之上的二级辅助索引,我理解散列索引都是二级或更高级的稀疏索引,否则桶就太多了,效率也不会很高。
2.3 位图索引
位图索引是一种针对多个字段的简单查询设计一种特殊的索引,适用范围比较小,只适用于字段值固定并且值的种类很少的情况,比如性别,只能有男和女,或者级别,状态等等,并且只有在同时对多个这样的字段查询时才能体现出位图的优势。
位图的基本思想就是对每一个条件都用0或者1来表示,如有5条记录,性别分别是男,女,男,男,女,那么如果使用位图索引就会建立两个位图,对应男的10110和对应女的01001,这样做有什么好处呢,就是如果同时对多个这种类型的字段进行and或or查询时,可以使用按位与和按位或来直接得到结果了。

总结:
B+树最常用,性能也不差,用于范围查询和单值查询都可以。特别是范围查询,非得用B+树这种顺序的才可以了。
HASH的如果只是对单值查询的话速度会比B+树快一点,但是ORACLE好像不支持HASH索引,只支持HASH表空间。
位图的使用情况很局限,只有很少的情况才能用,一定要确定真正适合使用这种索引才用(值的类型很少并且需要复合查询),否则建立一大堆位图就一点意义都没有了。

分享到:
评论

相关推荐

    数据库索引设计和优化

    数据库索引设计与优化是数据库管理系统中至关重要的一个环节,它直接影响到数据查询...通过学习《数据库索引设计与优化》这样的专业书籍,我们可以深入理解这些原理,并将其应用于实际工作,提升数据库系统的整体效能。

    数据库索引原理-个人开发体验总结

    数据库索引原理是数据库...总之,理解数据库索引原理,掌握聚族索引、主键和查询优化的运用,对于提高数据库性能和优化应用程序至关重要。通过不断实践和学习,我们可以更好地应对各种数据库挑战,实现高效的数据管理。

    数据库索引设计与优化.pdf

    《数据库索引设计与优化》提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地...

    数据库索引设计与优化

    , 《数据库索引设计与优化》适用于已经具备了SQL 这一关系型语言相关知识,希望通过理解SQL 性能相关的内容,或者希望通过了解如何有效地设计表和索引而从中获益的人员。另外,《数据库索引设计与优化》也同样适用于...

    自考数据库系统原理真题及答案模拟试卷

    此外,这些试题还可能涉及数据库性能优化,例如索引的使用、查询优化器的工作原理,以及如何进行数据库的备份和恢复,以应对可能的数据丢失或系统故障。 对于每个真题或模拟试卷的答案部分,考生不仅可以检查自己的...

    中级高级软考!! PDF 数据库系统原理

    数据库系统原理是信息技术领域中的核心课程,尤其对于中级和高级软件考试来说,深入理解数据库系统的概念、设计与管理是至关重要的。本资料“中级高级软考!! PDF 数据库系统原理”旨在帮助考生全面掌握数据库系统的...

    04735数据库系统原理(真题及答案)200710至201710.zip

    《04735数据库系统原理》是一门重要的高等...通过深入理解和实践这些知识点,考生可以更好地应对《04735数据库系统原理》的考试。真题和答案的练习可以帮助考生了解考试的题型、难度和解题策略,进一步巩固所学知识。

    数据库系统原理4375历年真题()

    数据库系统原理是计算机科学中的一个核心课程,主要探讨如何存储、组织、管理和检索数据...务必认真对待每一道题,深入理解其背后的原理,并尝试在实践中应用,这对于未来从事数据库相关的开发或管理工作都将大有裨益。

    数据库系统原理及MySQL应用教程习题答案.zip

    本压缩包“数据库系统原理及MySQL应用教程习题答案.zip”显然为学习者提供了宝贵的参考资料,特别是对正在学习这门课程的人来说,能够帮助他们理解和巩固所学知识。 首先,我们要理解数据库系统的基本概念。数据库...

    数据库索引设计与优化,经典圣作品

    本书提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL运行的CPU时间及...

    数据库系统原理课件免费下载

    10. **性能优化**:包括索引、查询优化、存储过程、分区和归档等方法,以提高数据库的性能。 11. **分布式数据库**:当数据分布在多个地理位置时,如何管理和协调这些数据库。这涉及分布式事务处理、复制和分片策略...

    第三版.zip(数据库系统原理与设计第三版课后答案 )

    这份《数据库系统原理与设计》第三版的课后答案PDF文件,可以帮助学生更有效地掌握上述各个章节的内容,通过解答习题,深化对数据库原理的理解,提升实际操作能力。对于准备数据库相关考试或项目开发的人来说,也是...

    书籍:Oracle与MySQL数据库索引设计与优化

    《Oracle与MySQL数据库索引设计与优化》这本书深入探讨了两个主流关系型数据库管理系统——Oracle和MySQL中的索引设计和优化策略。索引是数据库性能的关键因素,它们能够加速数据检索,提高系统效率,尤其在大数据量...

    数据库索引设计与优化_13823909_(美)拉赫....pdf

    本书提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL运行的CPU时间及...

    数据库系统原理及应用教程PPT课件

    理解这些组成部分的工作原理对于优化数据库性能至关重要。 4. 安装与配置:如何在Windows操作系统上安装和配置SQL Server 2000,包括设置服务器实例、安全性配置、网络配置等,确保数据库能正常运行。 5. 数据库...

    东北大学数据库系统原理及应用

    “数据库系统原理及应用”可能还会涉及数据库管理系统(DBMS)的工作原理,如查询优化、索引结构(B树、B+树、哈希索引等)、存储管理(包括内存管理、磁盘I/O操作)以及分布式数据库和云数据库的相关概念。...

    《数据库索引设计与优化》高清带书签

    本书提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL运行的CPU时间及...

Global site tag (gtag.js) - Google Analytics