索引:

查询User_indexes可以获取有关用户已创建的索引的详细信息。
查询User_ind_partitions可以获取有关用户已创建的分区索引的详细信息。
查询User_ind_columns可以获取有关列(用户的索引是基于这些列创建的)的详细信息。

索引类型:唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。

索引在逻辑上物理上都独立于关联表中的数据,在任何时候都可以创建或删除索引,而不会影响基表或其它索引。

1.创建普通索引的语法:
Create INDEX index_name ON table_name(column_list) [TABLESPACE tablespace_name];

其中:
index_name 指所创建索引的名称。
table_name 表示为之创建索引的表名。
column_list 是在其上创建索引的列名列表,可以基于多列创建索引。
tablespace_name 为索引指定表空间。

示例12:演示如何在itemfile表的itemcode列上创建索引
create index item_index on itemfile(itemcode);

2.ALTER INDEX语句的REBUILD选项可以用来重建现有的索引。该选项提供的性能要优于使用DROP INDEX和CREATE INDEX语句重新创建索引。

示例13:重建索引
ALTER INDEX item_index REBUILD;

删除索引语法:Drop INDEX item_index;

(1)唯一索引:此索引可以确保在定义索引的列中,表的任意两行的值都不相同。Oracle自动为表的主键列创建唯一索引。
可以使用Create UNIQUE INDEX命令明确地创建唯一索引。

示例14:在itemfile表的itemcode列上创建了一个名为item_index的唯一索引。
Create UNIQUE INDEX item_index ON itemfile(itemcode);

(2)组合索引:组合索引是在表中的多个列上创建的索引。组合索引中列的顺序是任意的,不必是表中相邻的列。
创建组合索引时,应注意定义中使用的列的顺序。通常,最频繁访问的列应放置在列表的最前面。

示例15:在itemfile表上创建了一个名为comp_index的组合索引,当查询该表的的WHERE子句同时包含这两个列或只包含
p_category列时,以下示例语句创建的索引将用于检索数据,但如果单独使用itemrate列,则索引不能用于检索数据。
Create INDEX comp_index ON itemfile(p_category,itemrate);

(3)反向键索引:通常建立在一些值连续增长的列上,例如列中的值是是由序列产生的情况。
示例16:在itemfile表上创建了一个名为rev_index的反向键索引。注意使用REVERSE关键字。
Create INDEX rev_index ON itemfile(itemcode) REVERSE;

示例17:使用关键字NOREVERSE可以将反向键索引重建为标准索引。
ALTER INDEX rev_index REBUILD NOREVERSE;
注意:不能将标准索引重建为反向键索引。

(4)位图索引:如果某个列的值重复超过一百次,则可以考虑在该列上创建位图索引。
示例18:itemcode是order_detail表中的低基数列,因为货物编码在大多数订单中都是重复的,因此适合在该列上创建位图索引。
Create BITMAP INDEX bit_ind1 ON order_detail(itemcode);
位图索引不应当用在频繁发生的INSERT,UPDATE,DELETE操作的表上。位图索引最适合于数据仓库和决策支持系统。

(5)索引组织表:索引组织表与在一个或多个列上建立索引的普通表相似,但它无需为表和索引维护两个单独的存储空间,
数据库系统仅维护一个索引,该索引包含相应的已编码键值和与其关联的列值。
示例19:使用ORGANIZATION INDEX子句来创建索引组织表。
Create table ind_org_tab
(
vencode NUMBER(4) primary key, 注意:primary key是创建索引组织表所必需的。不允许使用分区。
venname VARCHAR2(20)
)
organization index;
索引组织表适合于通过主键来访问数据。

(6)基于函数的索引:如果在WHERE子句的算术表达式或函数中已经包含了某个列,则不会使用该列上的索引。不能在表达式包含任何
聚合函数,LOB列、REF列或包含LOB或REF的对象类型上创建基于函数的索引。

示例20:venname是vendor_master表的一个列,用于存储供应商的姓名,假定所有供应商的姓名都以混合大小写的形式存储
(如:John Smith、Dave Jones、Tony Greig等等),同时假定我们经常需要根据供应商的姓名来查询表的数据。由于
姓名是以混合大小写的形式存储的,因此可能很难给出姓名的正确大小写形式。
可以创建如下索引:
Create INDEX vn_ind ON vendor_master(UPPER(venname));

示例21:演示如何使用前面创建的基于函数的索引检索数据。
select * from vendor_master where UPPER(venname)='SMALL';

要创建基于函数或表达式的索引,必须具有QUERY REWRITE系统权限。

(7)索引中的分区:与对表进行分区类似,Oracle也允许对索引分区。牵引分区可以存储在不同的表空间中。
局部分区索引:Oracle为表的每个分区建立一个独立的索引。

示例22:先创建分区表
Create table order_mast
(
orderno number(4),
venname varchar2(20)
)
partition by range(orderno)
(
partition oe1 values less than(1000),
partition oe2 values less than(2000),
partition oe3 values less than(maxvalue)
);

接着创建局部索引:
create INDEX myind ON order_mast(orderno) LOCAL;

全局分区索引:是指在分区表或非分区表上创建的索引。

示例23:在上面创建的分区表上创建全局索引
create INDEX glb_ind ON order_mast(orderno) GLOBAL
partition by range(orderno)
(
partition ip1 values less than(1500),
partition ip2 values less than(maxvalue)
);

在有3个分区的表上创建2个分区的索引。注意:不能在散列分区或子分区建立全局索引。

全局非分区索引:全局分区索引是在分区表上创建的全局索引,它类似于非分区表上的索引,索引的结构不会被分割。

oracle学习篇十二:索引的更多相关文章

  1. oracle 基础知识(十二)----索引

    一, 索引介绍 索引与表一样,也属于段(segment)的一种.里面存放了用户的数据,跟表一样需要占用磁盘空间.索引是一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效率而引入,是一个独立于 ...

  2. Oracle学习笔记(十二)

    十三.存储过程和存储函数1.掌握存储过程(相当于建立一个函数或者方法体,然后通过外部对其调用) 指存储在数据库中供所有程序调用的子程序叫做存储过程或存储函数. 相同点: 完成特定功能的程序 区别: 是 ...

  3. oracle学习篇十:序列

    序列:是用来生成唯一.连续的整数的数据库对象.序列通常用来自动生成主键或唯一键的值. 1. 创建序列语法如下: Create SEQUENCE sequence_name [START WITH in ...

  4. Oracle学习(十二)标量函数

    UCASE()大写转换  LCASE()小写转换 --把查询结果对应的列进行大写转换 SELECT UCASE(列) FROM 表; --把查询结果对应的列进行小写转换 SELECT LCASE(列) ...

  5. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  6. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  7. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  8. Tensorflow深度学习之十二:基础图像处理之二

    Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474   首先放出原始图像: ...

  9. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

随机推荐

  1. Python爬取招聘信息,并且存储到MySQL数据库中

    前面一篇文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为前一天的,同时将爬取的内容保存到数据库中:这篇文章主要讲述如何将python文件压缩成exe可执行文件,供后面的操作. 这系列文章 ...

  2. Spring框架的核心模块的作用

    Spring框架由7个定义良好的模块(组件)组成,各个模块可以独立存在,也可以联合使用. (1)Spring Core:核心容器提供了Spring的基本功能.核心容器的核心功能是用Ioc容器来管理类的 ...

  3. Unity---动画系统学习(4)---使用混合树(Blend Tree)来实现走、跑、转弯等的动画切换

    1. 介绍 Blend Tree用于多个动画之间的混合,比如走到跑的切换.转弯的切换. 如果用动画学习笔记(3)中的方法,需要新建很多的状态,不仅麻烦,而且切换状态时也很容易不流畅. 而Blend T ...

  4. html基础知识,整理

    # HMTL 基础知识 ###查看网页源代码吗 ``` ctrl + u``` ###dom元素 一个标签即代表一个dom元素 ###dom元素属性 ``` <p id ="first ...

  5. python的下划线

    首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注 ...

  6. [转] Spring Integration 系统集成

    [From] http://blog.csdn.net/w_x_z_/article/details/53316618 pring Ingegration 提供了基于Spring的EIP(Enterp ...

  7. Hibernate复合主键的注解

    [转自] http://blog.csdn.net/happylee6688/article/details/17636801 最近做项目用到了Hibernate框架,采用了纯面向对象的思想,使用OR ...

  8. 【实战】SSL和TLS漏洞验证

    工具下载:git clone https://github.com/drwetter/testssl.sh.git 实验环境:192.168.1.22(bee-box v1.6) 192.168.1. ...

  9. 【研究】Struts2-052漏洞

    漏洞描述: CVE-2017-9805 2017年9月5日,Apache Struts官方发布最新的安全公告称,Apache Struts 2.5.x的REST插件存在远程代码执行高危漏洞,漏洞编号为 ...

  10. PIE SDK打开Micaps数据

    1. 功能简介 Micaps数据是气象信息处理和天气预报制作中的一种气象数据格式.其包含多种气象信息产品(地面常规气象观测数据产品.高空常规气象观测数据产品等),目前Micaps数据被Micaps软件 ...