详谈 oracle 索引 (笔记)
1、oracle索引空值问题
当在有空值得列上建立单列索引时,如果搜索条件为 is null 在解释计划中可以看到,对于此列oracle并没有使用索引查询;
但是当建立的是多列索引是,就会按照索引来进行查询。
2、B-树索引
示意图:
在B-树索引中,将会按照从上到下的顺序进行索引。如果列的选择度不低的话,索引扫描就会很慢。原因就在于要遍历很多的叶子快来取出不同的行编号。
随着出入数据的增多,最右侧的叶子块也在一直的增大,可能会导致缓冲区的繁忙等待。这种类型的最右侧索引的快速增长被称为 右侧增长索引 。后面将谈到一些解决方法。
3、位图索引
位图索引不适合用于需要大量DML操作的表(DML指除select以外的SQL语句)。适合用于大多数数据具有较少的唯一的列进行的只读运算的数据仓库表。
位图索引要注意的一点是。更新一个具有位图索引的列,必须要更新位图索引。
4、分区索引
4.1、局部索引
局部索引使用LOCAL关键字来建立。
create index index_name on table_name (column_name) local;
当用到分区索引的时候,会直接查找匹配分区的内容,而不是查询每个分区。
4.2、全局索引
全局索引用GLOBAL来创建
4.3、散列分区
回归到B-数索引中所说到的右侧增长索引问题,就可以用散列分区的方式来进行分区。
与范围分区的方式不同散列分区是把所有的数据均匀的分布在不同的分区内。具体方法如下:
--范围分区
create table table2
partition by range(year)
(partition p_2012 values less than (2013),
partition p_2013 values less than (2014),
partition p_2014 values less than (2015),
partition p_max values less than (maxvalue)
)
as
select * from table1; --散列分区
drop sequence sf;
create sequence sf cache 200;
drop table table3; create table table3
partition by hash(sid)
partitions 32
as
select sf.nextval sid,t.* from table1 t; --通过以下代码可以查到
select dbms_rowid.rowid_object(rowid) obj_id,count(*) from table3
group by dbms_rowid.rowid_object(rowid); OBJ_ID COUNT(*)
---------- ----------
86232 4717
86236 4571
86240 4696
86257 4633
86234 4547
86235 4580
86241 4717
86249 4589
86250 4612
86251 4623
86261 4742
86238 4578
…… create unique index index_table3_sid on table3(sid) local; select * from table3_sid where sid =10000;
--查看其解释计划,可以得到
5、压缩索引
压缩索引是B-树索引的一个变体,更适合于引导列中具有重复值的列
create index index_name on table_name(column1,column2,column3) compress N;
其中N为压缩前几项。例如N=2就是压缩column1,column2这两项索引。
压缩索引适用于引导列具有较少唯一值的索引。
6、基于函数的索引
create create index index_name on table_name(function_name(column1));
在select是必须加上function_name(column1)才能使用索引,只用column1的话,还是全表扫描。
7、反转键索引
也是一种解决右侧增长索引问题的一种方法,但是因为索引是反转的所以不能使用范围运算符
create index index_name on table_name (column_name) global reverse;
不常用,因为会引起其他的一些负面影响
详谈 oracle 索引 (笔记)的更多相关文章
- Oracle索引知识学习笔记
目录 一.Oracle索引简介 1.1 索引分类 1.2 索引数据结构 1.3 索引特性 1.4 索引使用注意要点 1.5.索引的缺点 1.6.索引失效 二.索引分类介绍 2.1.位图索引 1.2.函 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- oracle索引监控
目的:监控oracle索引的有效性,看索引有没有被使用.然后根据监控结果删除或者调整索引. 步骤: 1.监控指定索引 命令: alter index 索引名 monitoring usage; 如 ...
- Oracle索引重建
一.前言 Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引.有人持不同观点,就是强烈建议不要定期重建索引.索引重建是一个争论不休被不断 ...
- Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- 【转】Oracle索引的类型
数据库的应用类型分为 OLTP(OnLine Transaction Processing ,联机事务处理):OLTP是传统关系型数据库的主要应用,其主要面向基本的.日常的事务处理,例如银行交易. O ...
- 【转】Oracle索引HINT的使用
转自:Oracle索引HINT的使用 存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...
- Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
随机推荐
- 学习资料 50个常用的sql语句
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...
- 洛谷P2729 饲料调配 Feed Ratios
P2729 饲料调配 Feed Ratios 36通过 103提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目背景 农夫约翰从来只用调 ...
- [drp 7]转发和重定向的区别
导读:类似于response.sendRedirect(request.getContextPath()+"/servlet/item/SearchItemServlet");和r ...
- json 對象的序列化
var a={x:1,y:2} s=JSON.stringify(a); //s="{"x":1,"y":2}" p=JSON.parse( ...
- 用C#访问SSRS自动导出SSRS报表
一. 新建一个winform应用程序WindowsFormsApplication1 二. 添加web引用 . 报表服务:http://dbpdhk ...
- 百度编辑器Ueditor自动换行,添加<p>的问题
百度编辑器Ueditor其实蛮好用的,后来使用了一段时间发现,每次打开后又保存,发现都会往内容的前后都增加一个空白的<p></p>.刚开始以后是百度编辑器的问题,找了很长时间也 ...
- import的用法
转自python学习笔记--模块和命名空间 模块(module)是Python中非常重要的一个概念,模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的 ...
- grunt 快速入门
Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本号的 No ...
- React模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android IOS WebRTC 音视频开发总结(四三)-- 诚信交易案例分享
本文主要记录一些诚信交易的案例(两个陌生人之间没有合同,没有订金,没有讨价还价,完全靠诚信完成的交易), 特别纪录下来并不是因为金额有多高,而是因为在现在这种社会要完成这样的交易太难,特别是像咨询这种 ...