一、索引的定义
在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。
在数据库关系图中,可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。
二、索引分类
在oracle数据库中,索引按照索引机制大致可分为三类:
1、B-tree索引
2、位图索引
3、全文索引
在mysql数据库中,索引按索引机制大致可分为
1、R-tree索引
2、B-tree索引
3、hash索引
在SQL Server数据库中,索引按索引机制大致可分为:
1、聚簇索引
2、非聚簇索引
1) 堆上的非聚簇索引
2) 聚簇索引上的非聚簇索引
三、Oracle中各个索引使用的场景
1、B-tree索引
—OLAP系统
—主键或唯一性约束
—键值重复率低的字段
2、位图索引
—OLAP系统
—键值重复率高的字段
—特定类型的数据
—不适宜在频繁DML的表上创建
3、全文索引
—当字段里存储的都是文本时适合用全文索引,常用于搜索文字
四、总结
对于一个海量数据库来说,没有索引是致命的,但是选错索引同样的致命的。
那么我们接下来对比一下各个索引的优劣:
1、全文索引:
优势:索引不是按键值存储,而是通过分词的方式存储、模糊查询比较快
劣势:占用大量空间、Bug比较多,难以维护
2、位图索引与B-tree索引对比:
位图索引更加节省空间
对于高重复率键值上的count、and、or等操作性能有帮助
通过上面我们已经简单的了解到各个索引所适用的场景和各自的优势。那么我们应该如何选择索引呢?我们可以参考下面的提示来帮助我们选择合适的索引:
1、如果字段数据的重复率不是很高,那么考虑使用B-tree索引
2、如果自动断数据的重复率较高,并且查询中有特定的查询方式(比如列之间有或、与等逻辑运算),则要考虑使用位图索引。
3、如果需要对列中的字段进行模糊查询或者语言类的查询,则应该考虑使用全文索引。