|
在数据库中包含了一个用于对表中记录按需排序,从而可以优化查询的特殊对象,它就是索引。索引和我们常见的书籍的目录用途相似,它可以帮助读者快速的实现查找功能。同样,数据库中的索引也可以帮助用户在表中快速的查询到满足条件的记录。
为了加快记录的定位速度,可以在表上创建必要的索引,一旦表上创建有索引,所有的DML 语句都将试图利用索引提高其执行速度,索引不能提高所有DML 语句的执行速度,只有条件表达式中含有索引键,且表达式适合索引扫描才能发挥索引的作用,若查询只偶尔从索引中获得效率提高,或根本不能从索引中获得效率,则索引的创建除为给系统凭添麻烦而外,别无任何好处。
一般索引方式有B树,R树,全文索引,位图索引等,其中B树索引用于在可比较大小的字段上,能享受索引好处的表达式形式应是基于关系操作符的关系表达式,以及非通配符开始的LIKE表达式(其形式为columnLIKE ‘xxx%’),B 树索引允许创建复合索引,即索引键字段数可以超过1 个,复合索引发挥作用的条件为:索引键字段的中的最前面的一个或连续多个字段的表达式应作为"与”式的因子出现在条件表达式中,例如:假定在表的字段f1,f2,f3 上创建了复合索引,则语句…WHERE f1=?? And f2=??可以享受索引的好处,而语句…WHERE f2=?? And f3=??则不能享受索引带来的好处,原因是最前面的f1 字段未出现在条件表达式中。
R树索引只针对空间数据类型,而且只能针对单个字段,即不能创建R树复合索引或B树与R树的混合复合索引。在以空间关系作为条件的查询中,除了"相离"(DISJOINT)关系不能享受R树索引带来的好处外,其余空间关系基本都能从R树索引中得到好处。
全文索引只针对文本类数据类型如:CHAR,VARCHAR,以及大对象中的文本等,若没有全文索引,则这类数据只能使用B 树索引,B树索引能发挥作用的条件为:条件表达式中与索引字段相关的子表达式应是基于关系操作符的关系表达式,以及非通配符开始的LIKE 表达式(其形式为column LIKE ‘xxx%’),但在对文本进行检索时,通常会以文本中包含有哪些关键词作为检索的条件,传统关系表达式中只有形式为column LIKE ‘%xxx%’的关系表达式能表达查询的意图,并能得到预想的结果。但以该形式的表达式为条件表达式的查询只能使用顺序扫描,即对全表进行扫描,而且在对全表的每一记录的文本字段进行测试时,还应对文本字段的全部进行关键词匹配扫描,显然,涉及到的数据量和运算强度都非常大,对于巨型表而言,经常性地全文搜索查询会使系统不堪重负。针对以上应用情况,采用全文索引解决查询性能问题。
位图索引主要针对大量相同值的列而创建(例如:类别,操作员,部门ID,库房ID等)。位图索引可以提高基数比较小的表的查询速度,这主要是因为在创建位图索引的时候,数据库往往会对整个表进行扫描,并为索引列的每个取值建立一个位图(位图索引的名字也由此而来)。在这个位图中,为表中的每一行使用一个位元来表示该行是否包含该位图的索引列的取值。位元到行的ROWID的对应关系通过位图索引中的应收函数来完成。如此的话,位图索引就能够以一种完全不同的内部机制来完成与B树索引相同的功能。
好了,浅浅的谈一些,相信大根据以上的讲解,对何时使用何种索引有一定的了解了,希望对大家有帮助,谢谢…… |
|