一、索引分类

     按逻辑分:

单列索引(Single column): 

单列索引是基于单列所创建的索引

复合(多列)索引(Concatenated ):

复合索引是基于两列或者多列所创建的索引

 唯一索引(Unique ):

唯一索引是索引列值不能重复的索引。

非唯一索引(NonUnique ):

非唯一索引是索引列可以重复的索引。

 函数索引(Function-based):

Oracle中不仅能够直接对表中的列创建索引,还可以对包含列的函数或表达式创建索引,这种索引称为“位图索引”。

域索引(Domain): 

域索引实际为用户自定义索引,域索引主要对存储在数据库中的媒体,图像数据进行索引,这些数据在oracle中基本上以BLOB类型存储,不同的应用存储格式也不同,           oracle不可能提供某一种现成的算法对这些数据进行索引,为了能够对这些类型数据快速访问,oracle提供了现成的接口函数,用户可以针对自己的数据格式实现这些接口函数,以达到对这些数据的快速访问。

  按物理分:

      分区索引(Partitioned):

表分区后其上建立的索引与普通表建立的索引不同,其索引是分区索引。

分区表上的索引分为2类,即局部索引和全局索引

局部索引local index

  • 局部索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区数,一句话,局部索引的分区机制和表的分区机制一样。
  • 如果局部索引的索引列以分区键开头,则称为前缀局部索引。
  • 如果局部索引的列不是以分区键开头,或者不包含分区键列,则称为非前缀索引。
  • 局部索引只能依附于分区表上
  • 前缀和非前缀索引都可以支持索引分区消除,前提是查询的条件中包含索引分区键。
  • 局部索引只支持分区内的唯一性,无法支持表上的唯一性,因此如果要用局部索引去给表做唯一性约束,则约束中必须要包括分区键列。
  • 局部分区索引是对单个分区的,每个分区索引只指向一个表分区;全局索引则不然,一个分区索引能指向n个表分区,同时,一个表分区,也可能指向n个索引分区,对分区表中的某个分区做truncate或者move,shrink等,可能会影响到n个全局索引分区,正因为这点,局部分区索引具有更高的可用性。
  • 位图索引只能为局部分区索引
  • 局部索引多应用于数据仓库环境中

全局索引global index

  • 全局索引的分区键和分区数和表的分区键和分区数可能都不相同,表和全局索引的分区机制不一样。
  • 全局索引可以分区,也可以是不分区索引,全局索引必须是前缀索引,即全局索引的索引列必须是以索引分区键作为其前几列。
  • 全局索引可以依附于分区表;也可以依附于非分区表
  • 全局分区索引的索引条目可能指向若干个分区,因此,对于全局分区索引,即使只截断一个分区中的数据,都需要rebulid若干个分区甚至是整个索引。
  • 全局索引多应用于oltp系统中
  • 全局分区索引只按范围或者散列分区,hash分区是10g以后才支持
  • oracle9i以后对分区表做move或者truncate的时可以用update global indexes语句来同步更新全局分区索引,用消耗一定资源来换取高度的可用性。
  • 表用a列作分区,索引用b做局部分区索引,若where条件中用b来查询,那么oracle会扫描所有的表和索引的分区,成本会比分区更高,此时可以考虑用b做全局分区索引。

非分区索引(NonPartitioned):

普通表上建立的索引。

B树索引(B-tree):

B树索引所函以下两种索引;

B树索引是按B树算法组织并存放索引数据的,所以B树索引主要依赖其组织并存放索引数据的算法来实现快速检索功能。
            正常型B树(Normal):

适合于大量的增、删、改(OLTP);不能用包含OR操作符的查询;适合高基数的列(唯一值多)典型的树状结构;每个结点都是数据块;大多都是物理上一层、两层或三层不定,逻辑上三层;叶子块数据是排序的,从左向右递增;在分支块和根块中放的是索引的范围;

反转型B树 (Rever Key):

              适用于 OPS 或 RAC 环境;反转了索引码中每列的字节,降低索引叶块的争用;

     位图索引(Bitmap):

位图索引在多列查询时,可以对两个列上的位图进行AND和OR操作,达到更好的查询效果。

适合于决策支持系统;做UPDATE代价非常高;非常适合OR操作符的查询;基数比较少的时候才能建位图索引;

二、索引创建

     索引的创建语法

  1. CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>
  2. ON <schema>.<table_name>
  3. (<column_name> | <expression> ASC | DESC,
  4. <column_name> | <expression> ASC | DESC,...)
  5. TABLESPACE <tablespace_name>
  6. STORAGE <storage_settings>
  7. LOGGING | NOLOGGING
  8. COMPUTE STATISTICS
  9. NOCOMPRESS | COMPRESS<nn>
  10. NOSORT | REVERSE
  11. PARTITION | GLOBAL PARTITION<partition_setting>

相关说明

1) UNIQUE | BITMAP:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。
2)<column_name> | <expression> ASC | DESC:可以对多列进行联合索引,当为expression时即“基于函数的索引”
3)TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)
4)STORAGE:可进一步设置表空间的存储参数
5)LOGGING | NOLOGGING:是否对索引产生重做日志(对大表尽量使用NOLOGGING来减少占用空间并提高效率)
6)COMPUTE STATISTICS:创建新索引时收集统计信息
7)NOCOMPRESS | COMPRESS<nn>:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)
8)NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值
9)PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区

     单列索引

  1. create index 索引名 on 表名 (列名) tablespace 表空间名;
  2.  
  3. CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users;

 复合索引

  1. create index 索引名 on 表名(列名1,列名2) tablespace 表空间;

唯一索引

  1. create uniuqe index 索引名 on 表名(列名) tablespace 表空间名;
  2.  
  3. create 索引类型 index 索引名 on 表名(列名) tablespace 表空间名;

反向键索引

  1. CREATE INDEX 索引名 ON 表名 (列名) reverseTABLESPACE 表空间名;
  2.  
  3. CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) reverse TABLESPACE users;

分区索引实例

  1. --1、建分区表
  2. CREATE TABLE P_TAB(
  3. C1 INT,
  4. C2 VARCHAR2(16),
  5. C3 VARCHAR2(64),
  6. C4 INT ,
  7. CONSTRAINT PK_PT PRIMARY KEY (C1)
  8. )
  9. PARTITION BY RANGE(C1)(
  10. PARTITION P1 VALUES LESS THAN (10000000),
  11. PARTITION P2 VALUES LESS THAN (20000000),
  12. PARTITION P3 VALUES LESS THAN (30000000),
  13. PARTITION P4 VALUES LESS THAN (MAXVALUE)
  14. );
  15. --2、建全局索引(分区-》对索引分区)
  16. CREATE INDEX IDX_PT_C4 ON P_TAB(C4) GLOBAL PARTITION BY RANGE(C4)
  17. (
  18. PARTITION IP1 VALUES LESS THAN(10000),
  19. PARTITION IP2 VALUES LESS THAN(20000),
  20. PARTITION IP3 VALUES LESS THAN(MAXVALUE)
  21. );
  22. --3、建本地(分区索引) (local index分区别索引)
  23. CREATE INDEX IDX_PT_C2 ON P_TAB(C2) LOCAL (PARTITION P1,PARTITION P2,PARTITION P3,PARTITION P4);
  24. --4、建全局(分区索引)(global index与分区表分区规则相同的列上)
  25. CREATE INDEX IDX_PT_C1
  26. ON P_TAB(C1)
  27. GLOBAL PARTITION BY RANGE (C1)
  28. (
  29. PARTITION IP01 VALUES LESS THAN (10000000),
  30. PARTITION IP02 VALUES LESS THAN (20000000),
  31. PARTITION IP03 VALUES LESS THAN (30000000),
  32. PARTITION IP04 VALUES LESS THAN (MAXVALUE)
  33. );
  34. --5、分区索引数据字典查看
  35. SELECT * FROM USER_IND_PARTITIONS;
  36. SELECT * FROM USER_PART_INDEXES;

oracle 的索引的更多相关文章

  1. Oracle索引梳理系列(七)- Oracle唯一索引、普通索引及约束的关系

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  2. oracle唯一索引与普通索引的区别和联系以及using index用法

    oracle唯一索引与普通索引的区别和联系 区别:唯一索引unique index和一般索引normal index最大的差异是在索引列上增加一层唯一约束.添加唯一索引的数据列可以为空,但是只要尊在数 ...

  3. oracle建索引的可选项

    oracle中建索引可能大家都会,但是建索引是有几个选项参数却很少有人关注,在某些特殊环境下,可能会非常有用,下面一一说明: 1.NOSORT,记录排序可选项. 默认情况下,在表中创建索引的时候,会对 ...

  4. oracle 创建索引思考(转)

    在Oracle数据库中,创建索引虽然比较简单.但是要合理的创建索引则比较困难了. 笔者认为,在创建索引时要做到三个适当,即在适当的表上.适当的列上创建适当数量的索引.虽然这可以通过一句话来概括优化的索 ...

  5. Oracle 重建索引脚本

    该指数是一个有力的武器,以提高数据库的查询性能. 没有索引,喜欢同样的标签库没有书籍,找书,他们想预订比登天还难.中,尤其是在批量的DML的情形下会产生对应的碎片.以及B树高度会发生对应变化.因此能够 ...

  6. [转]Oracle 重建索引的必要性

    http://blog.csdn.net/leshami/article/details/23763963 索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有自己的观点,我们很多DB ...

  7. ORACLE虚拟索引(Virtual Index)

    ORACLE虚拟索引(Virtual Index)   虚拟索引概念 虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段.虚拟索引的目 ...

  8. oracle 常用索引分析,使用原则和注意事项

    本文参考: https://www.cnblogs.com/wishyouhappy/p/3681771.html https://blog.csdn.net/weivi001/article/det ...

  9. 索引优化原则及Oracle中索引总结

    索引建立原则 确定针对该表的操作是大量的查询操作还是大量的增删改操作. 尝试建立索引来帮助特定的查询.检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引. where语句中不得不对查 ...

  10. oracle创建索引表空间

    Oracle 的索引可分为5种,它们包括唯一索引.组合索引.反向键索引.位图索引和基于函数的索引.1.创建索引的标准语法CREATE INDEX 索引名 ON 表名 (列名)TABLESPACE 表空 ...

随机推荐

  1. SQL Server存储机制二

    http://blog.csdn.net/ltylove2007/article/details/21084585 http://www.cnblogs.com/anding/p/3254674.ht ...

  2. .Net程序员安卓学习之路1:登陆界面

    任何编程学习起步均是HelloWorld,作为稍有>net编程经验的我们来说就跳过这步吧,咱们且从简单登录界面开始.先看看效果: 一.准备知识: 1. 安卓环境:安装好JDK,直接去官网下载AD ...

  3. HTTP访问的两种方式(HttpClient+HttpURLConnection)整合汇总对比

    HttpClient: HttpClient是Apache Jakarta Common下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版 ...

  4. 【C++Q】

    //c_str const char* str2Cchar(string s){ //const char* ss = s.c_str(); //出错,因为s会被析构,ss指向垃圾内容 ]; strc ...

  5. free 命令

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...

  6. dd命令使用详解

    dd命令使用详解 http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html 1.命令简介 dd 的主要选项: 指定数字的地方若 ...

  7. 30天,App创业从0到1【7.12西安站】

    活动概况 时间:2015年07月12日13:30-16:30 地点:汇天使咖啡(高新路36号智空间二楼) 主办:APICloud.UPYUN.万紫网络 网址:www.apicloud.com 费用:免 ...

  8. Spring MVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  9. 第三篇 Replication:事务复制-发布服务器

    本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库 ...

  10. VMWare ESXi 5.5安装及配置

    VMWare ESXi 5.5安装大概过程如下:制作虚拟化ESXi系统的USB启动盘,安装ESXi系统到USB,用USB启动ESXi系统.比较难理解,下面图解过程. 下载UNetbootin   (下 ...