1.索引概念
概念:类似于书目录,用于按条件查询的时候提高查询效率。
过程:先查询索引,再通过索引找到相关的数据。
保存:索引自身也是通过文件来保存的。
2.索引的类型(保存方式)
1)顺序索引:根据值的顺序排序(建立的索引字段值顺序的放在索引文件里面)。
2)散列索引:将值平均分配到若干散列桶中,通过散列函数定位。
2.1 顺序索引
分类:
聚集索引:被索引字段本身按照一定的顺序排序。=》非聚集索引:反面。
稠密索引:被索引字段的每个值都有一个索引与其对应。否则叫做稀疏索引。
单级索引:把所有的索引字段以及对应的文件位置按顺序一个个的排列出来。
顺序存储,查找慢,可用二分法查找。
多级索引:指向索引的索引。B+树。
B+树的目的和红黑树都是为了尽量保持树的平衡,但红黑树是二叉树,B+树节点下面可以有多个子节点。
数据库开发商会设置子节点数的一个最大值,这个值不会太小,所以B+树一般来说比较矮胖,红黑树比较瘦高。
B+树的插入,删除,会涉及到一些算法以保持树的平衡。ORACLE的默认索引就是这种结构。
如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引。
2.2 散列索引
通过散列函数定位。散列文件组织用的比较多。
散列文件组织根据一个键,通过散列计算把对应的记录都放到同一个槽中,这样拥有相同键值的记录一定放在同一个文件里。减少了文件读取的次数,提高了效率。
2.3 位图索引
位图索引是一种针对多个字段的简单查询设计一种特殊的索引,适用范围比较小,只适用于字段值固定并且值的种类很少的情况,比如性别,只能有男和女,或者级别,状态等等,并且只有在同时对多个这样的字段查询时才能体现出位图的优势。
位图的基本思想就是对每一个条件都用0或者1来表示,如有5条记录,性别分别是男,女,男,男,女,那么如果使用位图索引就会建立两个位图,对应男的10110和对应女的01001,这样做有什么好处呢,就是如果同时对多个这种类型的字段进行and或or查询时,可以使用按位与和按位或来直接得到结果了。
总结:
B+树最常用,性能也不差,用于范围查询和单值查询都可以。特别是范围查询,非得用B+树这种顺序的才可以了。
HASH的如果只是对单值查询的话速度会比B+树快一点,但是ORACLE好像不支持HASH索引,只支持HASH表空间。
位图的使用情况很局限,只有很少的情况才能用,一定要确定真正适合使用这种索引才用(值的类型很少并且需要复合查询),否则建立一大堆位图就一点意义都没有了。