Oracle优化可以分为通过改写sql优化和不改写sql优化不改写sql优化一般通过index来实现

在Oracle数据库中,索引按照索引机制的不同,可以分为三种。

1. B-Tree索引 B-Tree index

应用场景: OLTP 使用比较多,处理键值重复率比较低的字段比较适合使用B-Tree索引,处理效率极高。反之当键值重复率很高时,B-Tree索引的效率会非常效。

在Oracle中主键会默认加上B-Tree索引。在Oracle的主键和唯一性约束上 使用B-Tree索引

B-Tree索引又可以分为:唯一索引、组合索引、反向键索引、基于函数的索引。

A. 唯一键索引:

create unique index stu_no_index on t_student(no);

(1). 唯一键索引确保在定义的索引列中没有重复值,

(2). Oracle自动在表的主键列上创建唯一键索引。

(3). 使用CREATE UNIQUE INDEX语句创建唯一键索引。

B. 组合索引:

create index stu_group_index on t_student(class,student);

(1). 组合索引在表的多个列上创建的索引。

(2). 索引中列的顺序是任意的。

(3). 如果SQL语句的WHERE子句中引用了组合索引的所有列或大多数列,则可以提高检索速度。

C. 反向键索引:

create index stu_reverse_index on
t_student(no) reverse;

(1). 反向键索引反转索引列键值的每个字节。

(2). 通常建立在列的值是连续增值的,目的是为了使数据能够均匀的分布在整索引上。

(3). 创建时使用REVERSE关键字。

D. 基于函数的索引:

create or replace function f_minus1(i int)

   return int

   is

   begin

   return(i-1);

   end;

---建完函数后我们试着建立函数索引,发现建立失败

create index idx_ljb_test on test (f_minus1(object_id));

将会出现如下错误:

ORA-30553: 函数不能确定

将函数加上DETERMINISTIC关键字重建

create or replace function f_minus1(i int)

   return int DETERMINISTIC

    is

    begin

    return(i-1);

   end;

--现在发现加上DETERMINISTIC关键字后的自定义函数可以建立函数索引成功了!

create index idx_test on test (f_minus1(object_id));

explain plan for select * from test where f_minus1(object_id)=23;

set linesize 1000

select * from table(dbms_xplan.display);

(1). 基于一个或多个列上的函数或表达式创建的索引。

(2).  表达式中不能出现聚合函数。

(3). 不能在LOB类型的列上创建。

(4). 创建时必须有QUERY REWRITE权限。

(5). 一般不推荐使用函数索引

2. 位图索引   Bitmap index

create bitmap index index_name on table_name(column_name);

应用场景:

(1). 处理键值重复率比较高的字段比较适合使用。

(2). 比B-Tree索引更节省空间。

(3). 在OLAP系统中使用比较频繁。当一个表上某个(几个)字段的数值有明显的大量重复时,比如字段是国家、

地区、性别(世界上,或者该字段为其他的一些标识性信息。

(4). 特定类型的查询下性能很高。比如,要对一个结果集进行count操作,特别是在SQL语句的条件部分,在很多字段之间存在

着逻辑“与”、“或”运算的查询方式。

劣势:

(1). 索引列上不适合频繁的进行DML操作。

(2). 值重复率比较低的情况不适合使用。

(3). 位图索引适合在数据仓库中使用,在OLTP中不常使用。

3. 全文索引  Text index

应用场合: 属于数据仓库范畴,在OLTP系统中使用并不广泛。全文索引的优点在于可以对词汇的进行快速搜索。

劣势 :全文索引要 占用 大量的空间

context类型的全文索引是 不基于事务的 无法 实现数据和索引同步。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle性能优化4-索引的更多相关文章

  1. 【转载】我眼中的Oracle性能优化

    我眼中的Oracle性能优化 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角 ...

  2. 降低磁盘IO使Oracle性能优化(转)

    文章转自:http://blog.chinaunix.net/uid-26813519-id-3207996.html 硬件方面虽然只占Oracle性能优化的一个方面(另一方面是软件),但是仍不可忽视 ...

  3. MySQL 数据库性能优化之索引优化

    接着上一篇 MySQL 数据库性能优化之表结构,这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引 ...

  4. 我眼中的 Oracle 性能优化

    恒生技术之眼 作者 林景忠 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角度 ...

  5. oracle性能优化之awr分析

    oracle性能优化之awr分析 作者:bingjava 最近某证券公司系统在业务期间系统运行缓慢,初步排查怀疑是数据库存在性能问题,因此导出了oracle的awr报告进行分析,在此进行记录. 导致系 ...

  6. Oracle性能优化1-总体思路和误区

    最近在看梁敬彬老师关于Oracle性能优化的一些案例,在这里做一些简单的总结 1.COUNT(*)与COUNT(列)哪个更快 drop table t purge; create table t as ...

  7. Oracle性能优化小结

    Oracle性能优化小结 原则一.注意where子句中的连接顺序 Oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须卸载其他where条件之前,哪些可以滤掉最大数量记录的 ...

  8. MySQL性能优化:索引

    MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...

  9. SQL Server数据库性能优化之索引篇【转】

    http://www.blogjava.net/allen-zhe/archive/2010/07/23/326966.html 性能优化之索引篇 近期项目需要, 做了一段时间的SQL Server性 ...

  10. SQL Server查询性能优化——覆盖索引(二)

    在SQL Server 查询性能优化——覆盖索引(一)中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索引等 ...

随机推荐

  1. 命令行下IIS的配置脚本Adsutil.vbs

    命令行下IIS的配置脚本Adsutil.vbs 2009-08-20 12:26:52  www.hackbase.com  来源:Jackal's Blog Jackal's Blog文件存在于:C ...

  2. http://sourceforge.net/projects/rtspdirectshow/

    如何做一个解析rtsp协议的h264压缩的实时视频流播放器,带保存功能,目前我有rtsp协议的h264压缩后的实时视频流,目前想开发一个客户端,来播放该实时视频流,同时保存为视频文件,目前似乎有方案是 ...

  3. padding-bottom图片自适应

    今天学了慕课网的去哪了视频轮播图的图片自适应是这么做的htm,cssl如下:为什么padding-bottom 取值62.08% 呢,因为图片的高为465px,宽为749px. 465/749 既为6 ...

  4. php页面开启错误提示

    ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT);

  5. java工程师基础笔试题(一)

    一.选择和填空  (不定项哦!) 1,如下是一份文件名为Test2.java的源文件,请问,编译该文件之后会生成几份字节码文件 class Test{ class Inner{} static cla ...

  6. spring 事务传播

    1.spring实现对事务的控制,使用的是代理的技术.通过生成的代理类来捕捉被代理类(也就是我们编写的类)的异常,决定事务的提交或回滚.从某一角度来说,spring事务是基于异常实现的.对于实现了接口 ...

  7. 1.3.1、CDH 搭建Hadoop在安装之前(端口---Cloudera Manager和Cloudera Navigator使用的端口)

    下图概述了Cloudera Manager,Cloudera Navigator和Cloudera Management Service角色使用的一些端口: Cloudera Manager和Clou ...

  8. 如何区分Java中的方法重载和重写

    首先说的是重载: 方法的重载 * 在同一个类中,方法名相同,参数列表不同.与返回值类型无关. * 参数列表不同: * A:参数个数不同 * B:参数类型不同 * C:参数的顺序不同(不算重载 报错) ...

  9. cdnbest节点如何升级

    点节点列表==>选中要升级版本的节点==>更多操作==>升级节点 点击后会显示成功,这个时候就只需要等待节点自动升级就好,升级快时几分钟,慢可能就更久点了 但也有特殊情况会升级失败, ...

  10. veil-evasion免杀处理

    veil-evasion 开启 y 配置安装 安装好之后,再次运行veil-evasion 有50个payload模块 update 升级 list 查看有哪些payload 选一个payload 它 ...