一.索引

1.索引的概念

索引是一种可选的与表相关的数据库对象。
数据库中引入索引的目的是为了提高对表中数据的查询速度。
ORACLE并不是机械地为所有查询都使用索引,而是根据用户的具体使用情况,决定是否使用索引搜索数据。

2.索引类型

1 B树索引:又称平衡树索引,按照平衡树算法来组织的索引的,适合索引值取值范围广泛、重复率低的应用。
2 位图索引:按位图结构组织的索引,适合索引取值范围小、重复率高的应用。
3 函数索引:基于包含索引列的函数或表达式创建的索引。
4 唯一性索引与非唯一性索引:唯一索引是索引值不重复的索引,非唯一索引是索引值可以重复的索引。
5 单列索引与复合索引:索引可以创建一个列上,也可以创建多个列上。

3.索引使用的原则

数据导入后再创建索引。
在适当的表和列上创建适当的索引:
----经常查询的记录数目少于表中所有记录的5%时应当创建索引;
----经常进行表连接查询,在连接列上应建立索引;
----对于取值范围很大的列应创建B树索引;
-----对于取值范围很小的列应创建位图索引;
----不能在大数据类型的列上创建索引;
----ORACLE会自动在主键和唯一约束的列上创建唯一索引。
-----合理设置复合索引中列的顺序,应将频繁使用的列放在最前边。限制表中索引的数目,索引越多,查询越快,表的更新速度越慢。选择好存储索引的表空间,默认情况下,索引与表存储在同一表空间中。

4.创建索引

1、创建索引

语法格式:

 CREATE [UNIQUE][BITMAP] INDEX  index_nameON table_name(column_name[ASC|DESC],…| [expression])[TABLESPACE tablespace_name] ;

语法说明:
UNIQUE:表示建立唯一索引
BITMAP:表示建立位图索引
ASC|DESC:用于指定索引值的排列顺序

示例1:创建B树索引。(默认创建的是非唯一索引)
为产品表products的类别编号categoryid列创建1个B树索引。

CREATE  INDEX  prod_cateidON products(categoryid)TABLESPACE users;

默认情况下,当用户为表定义主键时,系统自动为该列创建一个唯一的B树索引;

不能在已包含索引的列创建索引;
示例2:创建唯一索引。为产品表 products的产品名称productname列创建1个唯一索引。

CREATE UNIQUE INDEX  uq_proNameON products (productname);

默认情况下,CREATE  INDEX创建的是非唯一索引;通常不需要为列创建唯一索引,当添加主键和唯一约束时系统会自动添加唯一索引。
示例3:创建位图索引。 为订单表orders的ShipCountry列创建1个位图索引btm_country。

CREATE BITMAP INDEX  btm_countryON orders (shipcountry);

位图索引不能是唯一索引。位图索引不能进行键压缩。单独的位图索引是无意义的,位图索引的作用来源于与其他位图索引的结合。
示例4:创建函数索引。为订单表orders的订购日期orderDate列创建函数索引ind_fun_oDate,使用extract函数取得日期中的年份。
(格式:extract(year from orderDate)

 CREATE INDEX  ind_fun_odateON orders  (extract(year from orderDate)) 

函数索引既可以是B树索引,也可以是位图索引。

5.与索引相关的数据字典

1)显示索引的基本描述信息和统计信息
       User_indexes,all_indexes,dba_indexes
2)显示索引列的信息
      user_ind_columns,all_ind_columns,
      dba_ind_columns

二.分区索引

1、索引分区介绍

在Oracle数据库中,索引与表是相互独立的,索引是否分区与表是否分区没有直接关系。不分区的表可以创建分区索引或不分区索引,分区的表也可以创建分索引或不分区的索引,在Oracle数据库中,分区索引分为本地分区索引和全局分区索引两种。

(1)本地分区索引

是指为分区表中的各个分区单独创建索引分区,各个索引分区之间是相互独立的,索引的分区与表的分区是一一对应的。如图所示:为分区表创建了本地分区索引后, Oracle会自动对表的分区和索引的分区进行同步维护。

(2)全局分区索引

是指先对整个表建立索引,然后再对索引进行分区。索引的分区之间不是相互独立的,索引分区与表分区之间也不是一一对应的,如图所示:

也可以为分区表创建非分区的全局索引,如图所示:

全局分区索引不能是位图索引,但可以是唯一索引

2.创建分区索引

1) 创建本地分区索引

分区表创建后,可以对分区表创建本地分区索引。在指明分区方法时使用 LOCAL关键标识本地分区索引。【例5】在 student_range分区表的sname列上创建本地分区索引。

 SQL>CREATE INDEX student_range_local ON student_range (sname) LOCAL;

2)创建全局分区索引

与表分区方法类似,索引分区方法也包括范围分区、列表分区、散列分区和复合分区在指明分区方法时使用GLOBAL关键字标识全局分区索引。【例6】为分区表 student_list的sage列建立基于范围的全局分区索引。

SQL>CREATE INDEX student_range_global ON student_range(sage)GLOBAL PARTITION BY RANGE(sage)(PARTITION p1 VALUES LESS THAN (80)TABLESPACE ORCLTBS1,PARTITION p2 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS22);

3))创建全局非分区索引

为分区表创建全局非分区索引与为标准表创建索引一样。

【例7】为分区表 student_list_index创建全局非分区索引。

SQL>CREATE INDEX student_list_index ON student list(sname) TABLESPACE indx;

3.删除索引

如果索引不再使用,或者由于移动了表数据而导致索引失效,或者由于索引中包含损坏数据块、过多的存储碎片等,可以考虑删除索引。如果索引是通过CREATE INDEX语句创建的,可以使用DROP INDEX语句删除索引

【例8】删除emp表中的emp_new_Iname_indx索引

SQL>DROP INDEX emp_new_Iname_ind

如果索引是定义约束时自动建立的,则在禁用约束或删除约束时会自动删除对应的索引.

4.查询索引

可以查询数据字典视图 DBA_INDEXES、 ALL_INDEXES、 USER_INDEXES、DBA_IND_COLUMNS、ALL_IND_COLUMNS USER_IND_COLUMNS获取索引信息

【例9】查询employees表中所有索引的名称与类型。

SQL>SELECT index_name, index_type FROM dba_indexes WHERE table name='EMPLOYEES'; 

Oracle索引和分区索引相关推荐

  1. oracle删除建分区索引,Oracle分区表之创建维护分区表索引的详细步骤

    分区索引分为本地(local index)索引和全局索引(global index).局部索引比全局索引容易管理, 而全局索引比较快.与索引有关的表:dba_part_indexes 分区索引的概要统 ...

  2. 深入学习Oracle分区表及分区索引

    关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: ?       Range(范围)分区 ?       Has ...

  3. java oracle 分区查询_深入学习Oracle分区表及分区索引

    深入学习Oracle分区表及分区索引 关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: •       Rang ...

  4. oracle 分区表,分区索引

    oracle 分区表,分区索引 1.分区表 一)范围分区 SCOTT@orcl#select tablespace_name from dba_tablespaces;TABLESPACE_NAME ...

  5. Oracle分区表及分区索引的创建

    关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: •       Range(范围)分区 •       Has ...

  6. ORACLE分区表、分区索引详解

    ORACLE分区表.分区索引ORACLE对于分区表方式其实就是将表分段存储,一般普通表格是一个段存储,而分区表会分成多个段,所以查找数据过程都是先定位根据查询条件定位分区范围,即数据在那个分区或那几个 ...

  7. oracle 分区表 字符串,ORACLE分区表、分区索引详解(转)

    今天逛论坛发现了一篇好文章,分享一下,自己也备个份,方便查找!! ORACLE分区表.分区索引ORACLE对于分区表方式其实就是将表分段存储,一般普通表格是一个段存储,而分区表会分成多个段,所以查找数 ...

  8. 【Oracle】表级别分区操作对索引(本地分区索引,全局分区索引,非分区索引)的影响

    --参考自<Oracle索引技术> 先贴上结论吧: 下面对以上几种操作分别测试: 创建测试表及索引 --创建测试分区表 CREATE TABLE employees_parttest (e ...

  9. oracle 建分区索引_Oracle分区索引

    索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局分区索引) 下面就来详细解 ...

最新文章

  1. 【TCP/IP详解 卷一:协议】第十二章 广播和多播
  2. Lead saved query bug
  3. 5折交叉验证_数据集的划分——交叉验证法
  4. Python-----规范化开发
  5. 六种PHP图片上传重命名方案研究与总结
  6. Django Python Web应用程序框架简介
  7. xcode环境变量设置(转载)
  8. 每日方法分享:手机识别图片文字怎么弄?
  9. django models 数据库 update_or_create 更新或者插入
  10. Photoshop渐变工具+羽化使用
  11. seems to be corrupted. Trying one more time
  12. bitbucket 代码备份
  13. Python:练习打字游戏
  14. unity 神笔画画
  15. Docker 下 jitsi-meet 视频服务器 安装部署
  16. js获取对象数组中的id集合
  17. Microbiome:微生物组名词定义
  18. 苹果抛弃 OpenGL !
  19. 生产者-消费者问题(有例题!!!)
  20. csgo账号连接服务器错误,steam csgo连接服务器发生错误 | 手游网游页游攻略大全...

热门文章

  1. mitsuba引擎并行部分小记
  2. 如何利用vertic-align做到让一个元素上下左右都对齐
  3. 永磁同步电机的矢量控制策略(三)一一一PWM控制算法
  4. 使用python3和pygame包小练游戏玩耍
  5. Android Studio常用快捷键、Android Studio快捷键大全
  6. 教你快递单号查询物流,并分析物流
  7. JSP+SQL网上选课系统(源代码+论文+答辩PPT)
  8. AI 机器人没有未来了
  9. python 操作excel坐标_python读取并定位excel数据坐标系详解
  10. Java全栈软件安装与环境配置