清明节一个人在家,已经混了一天了,想想还是写点什么吧。
以前对数据库的理解总是停留在使用的阶段,没有去研究过深层次的东西,这两天正好有空(其实也是工作需要),看了一下数据库索引的一些基础的东西,希望通过这篇博文,整理一下自己的思路。
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表空间。
位图的使用情况很局限,只有很少的情况才能用,一定要确定真正适合使用这种索引才用(值的类型很少并且需要复合查询),否则建立一大堆位图就一点意义都没有了。
- 浏览: 385766 次
最新评论
-
Aceslup:
非常感谢你提供的jars。
在Apache Tomcat 7设置redis作为session store -
Aceslup:
tomcat启动是没报错,不过,session无法保存到red ...
在Apache Tomcat 7设置redis作为session store -
pyzheng:
我也是这样配置了, 但是配置 <Valve class ...
在Apache Tomcat 7设置redis作为session store -
shiguanghui:
我检测到这个redis访问不正常。我肯定会停掉keepaliv ...
Redis双机热备(keepalived实现) -
ctfyforever:
非常感谢你的贡献,但是我发现个错误chk_redis.sh 脚 ...
Redis双机热备(keepalived实现)
相关推荐
### 数据库中的索引原理详解 #### 一、索引的概念与分类 索引是数据库管理系统(DBMS)为了提高查询速度而采用的一种数据结构。它就像书籍的目录一样,帮助用户快速定位到所需的数据记录。 ##### 1.1 索引的分类 ...
在深入探讨SQL数据库索引原理之前,我们先来理解一下索引的基本概念。索引,类似于书籍中的目录,是数据库中一种特殊的数据结构,用于快速定位数据。它并不存储实际的数据,而是存储了数据行的位置信息,使得数据库...
数据库索引设计与优化是数据库管理系统中至关重要的一个环节,它直接影响到数据查询...通过学习《数据库索引设计与优化》这样的专业书籍,我们可以深入理解这些原理,并将其应用于实际工作,提升数据库系统的整体效能。
数据库索引原理是数据库...总之,理解数据库索引原理,掌握聚族索引、主键和查询优化的运用,对于提高数据库性能和优化应用程序至关重要。通过不断实践和学习,我们可以更好地应对各种数据库挑战,实现高效的数据管理。
《数据库索引设计与优化》适用于已经具备了SQL 这一关系型语言相关知识,希望通过理解SQL 性能相关的内容,或者希望通过了解如何有效地设计表和索引而从中获益的人员。另外,《数据库索引设计与优化》也同样适用于...
, 《数据库索引设计与优化》适用于已经具备了SQL 这一关系型语言相关知识,希望通过理解SQL 性能相关的内容,或者希望通过了解如何有效地设计表和索引而从中获益的人员。另外,《数据库索引设计与优化》也同样适用于...
此外,这些试题还可能涉及数据库性能优化,例如索引的使用、查询优化器的工作原理,以及如何进行数据库的备份和恢复,以应对可能的数据丢失或系统故障。 对于每个真题或模拟试卷的答案部分,考生不仅可以检查自己的...
数据库索引是数据库管理系统中用于提高查询速度...总的来说,理解和掌握数据库索引的特性,能够帮助我们设计出更高效的数据库架构,提高查询性能,减少不必要的资源消耗,这对于任何IT专业人员来说都是至关重要的技能。
9. 数据库性能优化:探讨索引的使用、查询优化、存储优化和数据库性能监控方法。 最后,提供的答案是学习者自我评估的重要资源,可以用来对比自己的解题思路和结果,找出不足,进行改进。考生应参考答案,但不局限...
数据库系统原理是信息技术领域中的核心课程,尤其对于中级和高级软件考试来说,深入理解数据库系统的概念、设计与管理是至关重要的。本资料“中级高级软考!! PDF 数据库系统原理”旨在帮助考生全面掌握数据库系统的...
数据库系统原理是信息技术领域的重要组成部分,它涉及到数据的组织、管理和访问。本文将对数据库的基础、关系运算和数据库管理三个核心部分进行...深入理解数据库系统原理,能够帮助我们构建更高效、更可靠的应用系统。
数据库系统原理是计算机科学中的核心课程之一,尤其对于专升本的学生来说,深入理解这一领域至关重要。本压缩包“数据库系统原理 04735.rar”包含了一份珍贵的学习资源——"数据库系统原理 04735.pdf",这份资料很...
本压缩包“数据库系统原理及MySQL应用教程习题答案.zip”显然为学习者提供了宝贵的参考资料,特别是对正在学习这门课程的人来说,能够帮助他们理解和巩固所学知识。 首先,我们要理解数据库系统的基本概念。数据库...
综上所述,理解和掌握数据库中的索引原理,尤其是聚集索引和非聚集索引的区别,对于提升数据库查询效率和整体性能至关重要。在具体应用中,应结合数据特性、查询模式和业务需求,灵活运用索引策略,以实现最优的数据...
《04735数据库系统原理》是一门重要的高等...通过深入理解和实践这些知识点,考生可以更好地应对《04735数据库系统原理》的考试。真题和答案的练习可以帮助考生了解考试的题型、难度和解题策略,进一步巩固所学知识。
本书提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL运行的CPU时间及...
这份《数据库系统原理与设计》第三版的课后答案PDF文件,可以帮助学生更有效地掌握上述各个章节的内容,通过解答习题,深化对数据库原理的理解,提升实际操作能力。对于准备数据库相关考试或项目开发的人来说,也是...