oracle 的索引
一、索引分类
按逻辑分:
单列索引(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操作符的查询;基数比较少的时候才能建位图索引;
二、索引创建
索引的创建语法
- CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>
- ON <schema>.<table_name>
- (<column_name> | <expression> ASC | DESC,
- <column_name> | <expression> ASC | DESC,...)
- TABLESPACE <tablespace_name>
- STORAGE <storage_settings>
- LOGGING | NOLOGGING
- COMPUTE STATISTICS
- NOCOMPRESS | COMPRESS<nn>
- NOSORT | REVERSE
- 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:可以在分区表和未分区表上对创建的索引进行分区
单列索引
- create index 索引名 on 表名 (列名) tablespace 表空间名;
- CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users;
复合索引
- create index 索引名 on 表名(列名1,列名2) tablespace 表空间;
唯一索引
- create uniuqe index 索引名 on 表名(列名) tablespace 表空间名;
- create 索引类型 index 索引名 on 表名(列名) tablespace 表空间名;
反向键索引
- CREATE INDEX 索引名 ON 表名 (列名) reverseTABLESPACE 表空间名;
- CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) reverse TABLESPACE users;
分区索引实例
- --1、建分区表
- CREATE TABLE P_TAB(
- C1 INT,
- C2 VARCHAR2(16),
- C3 VARCHAR2(64),
- C4 INT ,
- CONSTRAINT PK_PT PRIMARY KEY (C1)
- )
- PARTITION BY RANGE(C1)(
- PARTITION P1 VALUES LESS THAN (10000000),
- PARTITION P2 VALUES LESS THAN (20000000),
- PARTITION P3 VALUES LESS THAN (30000000),
- PARTITION P4 VALUES LESS THAN (MAXVALUE)
- );
- --2、建全局索引(分区-》对索引分区)
- CREATE INDEX IDX_PT_C4 ON P_TAB(C4) GLOBAL PARTITION BY RANGE(C4)
- (
- PARTITION IP1 VALUES LESS THAN(10000),
- PARTITION IP2 VALUES LESS THAN(20000),
- PARTITION IP3 VALUES LESS THAN(MAXVALUE)
- );
- --3、建本地(分区索引) (local index分区别索引)
- CREATE INDEX IDX_PT_C2 ON P_TAB(C2) LOCAL (PARTITION P1,PARTITION P2,PARTITION P3,PARTITION P4);
- --4、建全局(分区索引)(global index与分区表分区规则相同的列上)
- CREATE INDEX IDX_PT_C1
- ON P_TAB(C1)
- GLOBAL PARTITION BY RANGE (C1)
- (
- PARTITION IP01 VALUES LESS THAN (10000000),
- PARTITION IP02 VALUES LESS THAN (20000000),
- PARTITION IP03 VALUES LESS THAN (30000000),
- PARTITION IP04 VALUES LESS THAN (MAXVALUE)
- );
- --5、分区索引数据字典查看
- SELECT * FROM USER_IND_PARTITIONS;
- SELECT * FROM USER_PART_INDEXES;
oracle 的索引的更多相关文章
- Oracle索引梳理系列(七)- Oracle唯一索引、普通索引及约束的关系
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- oracle唯一索引与普通索引的区别和联系以及using index用法
oracle唯一索引与普通索引的区别和联系 区别:唯一索引unique index和一般索引normal index最大的差异是在索引列上增加一层唯一约束.添加唯一索引的数据列可以为空,但是只要尊在数 ...
- oracle建索引的可选项
oracle中建索引可能大家都会,但是建索引是有几个选项参数却很少有人关注,在某些特殊环境下,可能会非常有用,下面一一说明: 1.NOSORT,记录排序可选项. 默认情况下,在表中创建索引的时候,会对 ...
- oracle 创建索引思考(转)
在Oracle数据库中,创建索引虽然比较简单.但是要合理的创建索引则比较困难了. 笔者认为,在创建索引时要做到三个适当,即在适当的表上.适当的列上创建适当数量的索引.虽然这可以通过一句话来概括优化的索 ...
- Oracle 重建索引脚本
该指数是一个有力的武器,以提高数据库的查询性能. 没有索引,喜欢同样的标签库没有书籍,找书,他们想预订比登天还难.中,尤其是在批量的DML的情形下会产生对应的碎片.以及B树高度会发生对应变化.因此能够 ...
- [转]Oracle 重建索引的必要性
http://blog.csdn.net/leshami/article/details/23763963 索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有自己的观点,我们很多DB ...
- ORACLE虚拟索引(Virtual Index)
ORACLE虚拟索引(Virtual Index) 虚拟索引概念 虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段.虚拟索引的目 ...
- oracle 常用索引分析,使用原则和注意事项
本文参考: https://www.cnblogs.com/wishyouhappy/p/3681771.html https://blog.csdn.net/weivi001/article/det ...
- 索引优化原则及Oracle中索引总结
索引建立原则 确定针对该表的操作是大量的查询操作还是大量的增删改操作. 尝试建立索引来帮助特定的查询.检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引. where语句中不得不对查 ...
- oracle创建索引表空间
Oracle 的索引可分为5种,它们包括唯一索引.组合索引.反向键索引.位图索引和基于函数的索引.1.创建索引的标准语法CREATE INDEX 索引名 ON 表名 (列名)TABLESPACE 表空 ...
随机推荐
- SQL Server存储机制二
http://blog.csdn.net/ltylove2007/article/details/21084585 http://www.cnblogs.com/anding/p/3254674.ht ...
- .Net程序员安卓学习之路1:登陆界面
任何编程学习起步均是HelloWorld,作为稍有>net编程经验的我们来说就跳过这步吧,咱们且从简单登录界面开始.先看看效果: 一.准备知识: 1. 安卓环境:安装好JDK,直接去官网下载AD ...
- HTTP访问的两种方式(HttpClient+HttpURLConnection)整合汇总对比
HttpClient: HttpClient是Apache Jakarta Common下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版 ...
- 【C++Q】
//c_str const char* str2Cchar(string s){ //const char* ss = s.c_str(); //出错,因为s会被析构,ss指向垃圾内容 ]; strc ...
- free 命令
free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...
- dd命令使用详解
dd命令使用详解 http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html 1.命令简介 dd 的主要选项: 指定数字的地方若 ...
- 30天,App创业从0到1【7.12西安站】
活动概况 时间:2015年07月12日13:30-16:30 地点:汇天使咖啡(高新路36号智空间二楼) 主办:APICloud.UPYUN.万紫网络 网址:www.apicloud.com 费用:免 ...
- Spring MVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- 第三篇 Replication:事务复制-发布服务器
本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库 ...
- VMWare ESXi 5.5安装及配置
VMWare ESXi 5.5安装大概过程如下:制作虚拟化ESXi系统的USB启动盘,安装ESXi系统到USB,用USB启动ESXi系统.比较难理解,下面图解过程. 下载UNetbootin (下 ...