快速熟悉Oracle索引
一、索引
1.1 什么是索引?
- 一种用于提升查询效率的数据库对象;
- 通过快速定位数据的方法,减少磁盘的输入输出操作;
- 索引信息与表独立存放;
- Oracle数据库自动使用和维护索引。
1.2 索引分类
- 唯一性索引
- 非唯一性索引
1.3创建索引的两种方式
- 自动创建---在定义主键或唯一键约束时系统会自动在相应的字段上创建唯一性索引.
- 手动创建----用户可以在其他列上创建非唯一的索引,以加速查询.
select * from user_indexes /** 查询现有的索引*/
select * from user_ind_columns /*可获知索引建立在哪些字段上*/
drop index ' 索引名' 删除索引
二、如何创建索引:
2.1、创建索引的语法
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:可以在分区表和未分区表上对创建的索引进行分区
看上面的内容的确让人有点头晕,下面是对上面创建索引语法的一个简单示例:
1、创建索引的标准语法
CREATE INDEX 索引名 ON 表名 (列名)TABLESPACE 表空间名;
例如:
CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users;
2、创建唯一索引
CREATE unique INDEX 索引名 ON 表名 (列名)TABLESPACE 表空间名;
例如:
CREATE UNIQUE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users;
3、创建组合索引
CREATE INDEX 索引名 ON 表名 (列名1,列名2)TABLESPACE 表空间名;
例如:
CREATE INDEX idx_of_imsi ON uim_auth_file(iccid,imsi) TABLESPACE users;
4、创建反向键索引
CREATE INDEX 索引名 ON 表名 (列名) reverseTABLESPACE 表空间名;
例如:
CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) reverse TABLESPACE users;
三、有关索引的细节问题
3.1 索引的存储
索引和表都是独立存在的。在为索引指定表空间的时候,不要将被索引的表和索引指向同一个表空间,这样可以避免产生的IO冲突。是Oracle能够并行访问存放在不同硬盘中的索引数据和表数据,更好的提高查询速度。
3.2使用索引的原则
- 查询结果是数据行的5%以下时,使用index查询最好
- where条件中经常用到表的多列时,使用复合索引的效果会好于几个单列索引。因为sql 语句所查询的列全部都出现在复合索引中时,此时由于Oracle只需查询索引块即可获得所有数据,当然比使用单个索引列要快的多。
- 索引利于select ,但对经常insert ,delete尤其update的表,会降低效率,因为需要调整索引的位置和值.
- 在使用复合索引时,where字句中的这个字段必须是复合索引的第一个字段. 例如一个索引时按f1、f2、f3的次序建立的,若where 子句是f2=:var2,因为f2不是索引的第一个字段,无法使用该索引。
- 应尽量熟悉各种操作符对Oracle是否使用的影响:以下这些操作会显示的阻止Oracle使用索引:is null、is not null、not in 、!=、like 以及各种函数等.
快速熟悉Oracle索引的更多相关文章
- 快速熟悉 Oracle AWR 报告解读
目录 AWR报告简介 AWR报告结构 基本信息 Report Summary Main Report RAC statistics Wait Event Statistics 参考资料 本文面向没有太 ...
- Oracle索引重建
一.前言 Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引.有人持不同观点,就是强烈建议不要定期重建索引.索引重建是一个争论不休被不断 ...
- 【转】Oracle索引HINT的使用
转自:Oracle索引HINT的使用 存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...
- Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- Oracle索引梳理系列(二)- Oracle索引种类及B树索引
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- ORACLE 索引概述
索引是数据库中一种可选的数据结构,她通常与表或簇相关.用户可以在表的一列或数列上建立索引,以提高在此表上执行 SQL 语句的性能.就像本文档的索引可以帮助读者快速定位所需信息一样,Oracle 的索引 ...
- Oracle 索引扫描的4种类型
根据索引的类型与where限制条件的不同,有4种类型的Oracle索引扫描: 3,4可归一种 (1) 索引唯一扫描(index uniquescan) (2) 索引范围扫描(index range s ...
- Oracle索引——位图索引
1.语法create bitmap index index_name on 表名(字段);2.举个例子你就能明白了:如有表 test(id,name,address)数据(1,张三,大连)(2,李四, ...
- Oracle索引详解
Oracle索引详解(二) --索引分类 Oracle 提供了大量索引选项.知道在给定条件下使用哪个选项对于一个程序的性能来说非常重要.一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程 ...
随机推荐
- OpenMP与MPI联合编程
研究一下如何一起使用mpi和openmp 先上程序: #include <stdio.h> #include <stdlib.h> #ifdef _OPENMP #includ ...
- 【Netty源码分析】Reactor线程模型
1. 背景 1.1. Java线程模型的演进 1.1.1. 单线程 时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一. 在Java领域当时比 ...
- EBS接口程序调试
这两天在做采购接收的时候有一个香港的业务实体的采购接不进去,但是其他业务实体能接进去,找错误话费了不少时间,也参考了网上好多资料,虽然最后这个方法没用但觉得还是很有用的,整理一下作为自己的一个总结 错 ...
- Xdoclet + Ant自动生成Hibernate配置文件
在使用Hibernate的时候,过多的Hibernate配置文件是一个让人头疼的问题.最近接触了Xdoclet这个工具.它实际上就是一个自动代码生成的工具,Xdoclet不能单独运行,必须搭配其他工具 ...
- Swift基础之:新的访问控制fileprivate和open
(转载的,暂时没有研究过这类语句,有空看看) 在swift 3中新增加了两种访问控制权限 fileprivate和 open.下面将对这两种新增访问控制做详细介绍. fileprivate 在原有的s ...
- Handler,MessageQueue Loop 和Message的原理解析
先介绍和handler一起工作的几个组件 Handler的方法介绍 代码示例 package liu.peng.weather; import java.util.Timer; import java ...
- linux命令指usermod(管理用户以及权限的命令)
usermod命令:用来修改用户帐号的各项设定. 示例:usermod -a -G usergroupnewuser 或者usermod -aGusergroup newuser 语法:usermod ...
- JAVA获取计算机的IP、名称、操作系统等信息
[java] view plaincopyprint? import java.io.BufferedReader; import java.io.InputStream; import java.i ...
- 发布一个参考ssdb,用go实现的类似redis的高性能nosql:ledisdb
起因 ledisdb是一个参考ssdb,采用go实现,底层基于leveldb,类似redis的高性能nosql数据库,提供了kv,list,hash以及zset数据结构的支持. 我们现在的应用极大的依 ...
- Groovy脚本检查html坏链接
这些天在搞Gradle翻译,因为原译者在翻译的同时也把文件进行了整理,并且把翻译过的章节放到新的文件夹中,导致可能有些超链接未改正过来变成死链接. 本想在网上找个工具来检查的,百度了几个工具要么太大要 ...