索引可以按照逻辑和物理来区分。
按逻辑区分:逻辑分类从应用程序的角度对索引进行分组
1.单列索引和组合索引
单列索引:在索引关键字中仅有一列。
组合索引:由多个属性列组合起来的索引。
组合索引的字段顺序选择原则:
最频繁出现的列,放在前面;选择过滤条件最好的字段在前面;
2.唯一性索引和非唯一性索引
唯一性索引:唯一索引保证定义索引的列中没有任何两行重复值,唯一索引中的索引关键字只能只能指向表中的一行。通常,主键 和唯一性约束,系统自动创建唯一性索引,也可以手工使用using index命令来创建。
非唯一性索引:单个关键字可以有多个与其关联的行。
3.函数索引
若在SQL语句中频繁使用函数或表达式,并有很好的过滤特性时,则可以创建基于函数的索引。基于函数的索引预先计算函数或表 达式的值,并将结果存储在索引。函数索引建立后,不一定能立即使用(在9.1以前版本我们需要设置函数索引的环境,函数索引需 要系统开启查询重写和信任 关系,而在 9.2版本后不需要)。创建完函数索引,必须要进行分析后才能使用;确保函数索引涉及的 表达式没有空值,否则无法使用函数索引;如果是用户自定义的函数,则这个函数要设置成DETERMINISTIC属性,使得函数相同的 输入,一定有相同的输出,以不至于使用函数索引获 得不正确的行。在9.1版本(包括9.1)前必须有QUERY REWRITE的功能,如果 函数在另一个SCHEMA,那么需要GLOBAL QUERY REWRITE,并必须有QUERY_REWRITE_INTEGRITY=TRUSTED信任关系,比如相同的输入也并必须有同样的答案。
4.应用程序域索引
应用程序域索引称为扩展索引,用于处理特殊应用的索引,如TEXT文本的搜索,利用INTERMEDIA来搜索视频,指纹识别等。它相 当于自定义索引规则的索引类型。
按物理存储区分:
1.分区索引和非分区索引
非分区索引:常规表索引
分区索引:用于大型表的海量数据库VLDB,基于多个分区列上的索引存储到多个分区索引段,基于表分区单独创建的索引称为本地 索引,本地索引分前缀本地分区索引和非前缀本地分区索引,基于全表的分区键来建立分区索引段的称为全局分区索引,全局分区 索引只有前缀全局分区索引,10G主要有范围和HASH两种。
2.B*Tree索引
B*Tree索引的构造类似于二叉树,能根据键提供一行或一个行集的快速访问,通常只需很少的读操作就能找到正确的行。主要分 为:
索引组织表:IOT其实就是中索引,而且是B*Tree索引,它只不过多了表数据。
B*Tree聚簇索引:聚簇索引也是B*Tree。
降序索引:在9I后,Oracle提供了降序索引,在进行降序排序时会用到降序索引。
反向键索引:用于RAC系统,键值顺序存放在相同或相邻的块上,容易造成并发热索引块,通过反转函数,将原来物理相邻的键 值,分散到不相邻的索引块上,避免范围扫描时过度频繁扫描某些块。
位图索引:对于位图索引,一个索引条目则使用一个位图同时指向多行,位图索引适用于高度重复而且通常只读的数据(高度重复是 指相对于表中的总行数,数据只有很少的几个不同值)
按逻辑区分:逻辑分类从应用程序的角度对索引进行分组
1.单列索引和组合索引
单列索引:在索引关键字中仅有一列。
组合索引:由多个属性列组合起来的索引。
组合索引的字段顺序选择原则:
最频繁出现的列,放在前面;选择过滤条件最好的字段在前面;
2.唯一性索引和非唯一性索引
唯一性索引:唯一索引保证定义索引的列中没有任何两行重复值,唯一索引中的索引关键字只能只能指向表中的一行。通常,主键 和唯一性约束,系统自动创建唯一性索引,也可以手工使用using index命令来创建。
非唯一性索引:单个关键字可以有多个与其关联的行。
3.函数索引
若在SQL语句中频繁使用函数或表达式,并有很好的过滤特性时,则可以创建基于函数的索引。基于函数的索引预先计算函数或表 达式的值,并将结果存储在索引。函数索引建立后,不一定能立即使用(在9.1以前版本我们需要设置函数索引的环境,函数索引需 要系统开启查询重写和信任 关系,而在 9.2版本后不需要)。创建完函数索引,必须要进行分析后才能使用;确保函数索引涉及的 表达式没有空值,否则无法使用函数索引;如果是用户自定义的函数,则这个函数要设置成DETERMINISTIC属性,使得函数相同的 输入,一定有相同的输出,以不至于使用函数索引获 得不正确的行。在9.1版本(包括9.1)前必须有QUERY REWRITE的功能,如果 函数在另一个SCHEMA,那么需要GLOBAL QUERY REWRITE,并必须有QUERY_REWRITE_INTEGRITY=TRUSTED信任关系,比如相同的输入也并必须有同样的答案。
4.应用程序域索引
应用程序域索引称为扩展索引,用于处理特殊应用的索引,如TEXT文本的搜索,利用INTERMEDIA来搜索视频,指纹识别等。它相 当于自定义索引规则的索引类型。
按物理存储区分:
1.分区索引和非分区索引
非分区索引:常规表索引
分区索引:用于大型表的海量数据库VLDB,基于多个分区列上的索引存储到多个分区索引段,基于表分区单独创建的索引称为本地 索引,本地索引分前缀本地分区索引和非前缀本地分区索引,基于全表的分区键来建立分区索引段的称为全局分区索引,全局分区 索引只有前缀全局分区索引,10G主要有范围和HASH两种。
2.B*Tree索引
B*Tree索引的构造类似于二叉树,能根据键提供一行或一个行集的快速访问,通常只需很少的读操作就能找到正确的行。主要分 为:
索引组织表:IOT其实就是中索引,而且是B*Tree索引,它只不过多了表数据。
B*Tree聚簇索引:聚簇索引也是B*Tree。
降序索引:在9I后,Oracle提供了降序索引,在进行降序排序时会用到降序索引。
反向键索引:用于RAC系统,键值顺序存放在相同或相邻的块上,容易造成并发热索引块,通过反转函数,将原来物理相邻的键 值,分散到不相邻的索引块上,避免范围扫描时过度频繁扫描某些块。
位图索引:对于位图索引,一个索引条目则使用一个位图同时指向多行,位图索引适用于高度重复而且通常只读的数据(高度重复是 指相对于表中的总行数,数据只有很少的几个不同值)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29173997/viewspace-1126298/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29173997/viewspace-1126298/