Oracle性能优化4-索引
来源:互联网 发布:支付宝知托付 广告 编辑:程序博客网 时间:2024/06/04 17:53
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-索引
- oracle性能优化之索引
- oracle 性能优化--索引总结
- Oracle性能优化5-索引的不足
- 关于oracle索引的性能优化
- Oracle中索引的使用 索引性能优化调整
- Oracle性能优化读书笔记(2)-SQL语句和索引优化
- ORACLE索引介绍与高性能SQL优化(转)
- Oracle Database10g 性能调整与优化--索引的类型
- 通过调节索引 优化Oracle关联查询性能
- oracle 性能优化操作八: 利用HINT强制指定索引
- oracle 性能优化操作九: 屏蔽无用索引
- oracle 性能优化操作十四: 使用基于函数的索引
- oracle 性能优化操作十六: 使用分区索引
- oracle 性能优化操作十七: 使用位图索引
- oracle 性能优化操作八: 利用HINT强制指定索引
- oracle 性能优化操作九: 屏蔽无用索引
- oracle 性能优化操作十四: 使用基于函数的索引
- 如何优雅的ML(一) k-近邻算法
- 认识飞龙团队
- make uImage(uImage生成过程)
- Servlet API
- 经典算法4之最长递增子序列
- Oracle性能优化4-索引
- sencha touch call controller function from view class in sencha touch
- opencv 2.x学习笔记(八)滚动条、混合图像
- 全面了解hive
- 程序员的奋斗史(四十二)——大学断代史(六)——我与图书馆
- dom4j 解析 xml文件
- java中的移位 <<<
- Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
- django学习笔记(模板)