一、 ROWID的概念

存储了row在数据文件中的具体位置:64位 编码的数据,A-Z, a-z, 0-9, +, 和 /,

row在数据块中的存储方式

SELECT ROWID, last_name FROM hr.employees WHERE department_id = 20;

比 如:OOOOOOFFFBBBBBBRRR

OOOOOO:data object number, 对应dba_objects.data_object_id

FFF:file#, 对应v$datafile.file#

BBBBBB:block#

RRR:row#

Dbms_rowid包

SELECT dbms_rowid.rowid_block_number('AAAGFqAABAAAIWEAAA') from dual;

具 体到特定的物理文件

二、 索引的概念

1、 类似书的目录结构

2、 Oracle 的“索引”对象,与表关联的可选对象,提高SQL查询语句的速度

3、 索引直接指向包含所查询值的行的位置,减少磁盘I/O

4、 与所索引的表是相互独立的物理结构

5、 Oracle 自动使用并维护索引,插入、删除、更新表后,自动更新索引

6、 语法:CREATE INDEX index ON table (column[, column]...);

7、 B-tree结构(非bitmap):

[一]了解索引的工作原理:

表:emp

目标:查询Frank的工资salary

建立索 引:create index emp_name_idx on emp(name);

[试验]测试索引的作用:

1. 运行/rdbms/admin/utlxplan 脚本

2. 建立测试表

create table t as select * from dba_objects;

insert into t select * from t;

create table indextable

as select rownum id,owner,object_name,subobject_name,

object_id,data_object_id,object_type,created

from t;

3. set autotrace trace explain

4. set timing on

5. 分析表,可以得到cost

6. 查询 object_name=’DBA_INDEXES’

7. 在object_name列上建立索引

8. 再查询

[思考]索引的代价:

插入,更新

三、索引的分类

逻辑分类:

唯一索引/非唯一索引:对某一列或几列的键值(key)是否是唯一的,当某列任意两行的值都不相同时适合创建唯一索引(CREATE UNIQUE INDEX index ON table

(column););当表建立Primary Key(主键)或者Unique constraint(唯一约束)时,唯一索引将被自动建立;

对一列或多列建的索引:索引分离于表,作为一个单独的个体存在,除了可以根据单个字段创建索引,也可以根据多列创建索引。Oracle要求创建索引最多不可超过32列。

基于函数(function-based)的索引:基于某些函数索引,当执行某些函数时需要对其进行计算,可以将某些函数的计算结果事先保存并加以索引,提高效率;

组合索引:当两个或多个列经常一起出现在where条件中时,则适合在这些列上同时创建组合索引;

域(domain)索引:索引数据库以外的数据,使用相对较少;

物理分类:

B*树(B-tree)索引(默认方式):Root为根节点,branch 为分支节点,leaf 到最下面一层称为叶子节点。每个节点表示一层,当查找某一数据时先读根节点,再读支节

点,最后找到叶子节点。叶子节点会存放index entry (索引入口),每个索引入口对应一条记录(key的值、长度、rowid等)

反向键(reverse key)索引:

位图(bitmap)索引:位图索引主要针对大量相同值的列而创建,位图索引通过不同位图取值直接的位运算(与或),来获取到结果集合向量(计算出的结果)。

四、 唯一索引

1、 何时创建:当某列任意两行的值都不相同

2、 当建立Primary Key(主键)或者Unique constraint(唯一约束)时,唯一索引将被自动建立

3、 语法:CREATE UNIQUE INDEX index ON table (column);

4、 演示

五、 组合索引

1、 何时创建:当两个或多个列经常一起出现在where条件中时,则在这些列上同时创建组合索引

2、 组合索引中列的顺序是任意的,也无需相邻。但是建议将最频繁访问的列放在列表的最前面

3、 演示(组合列,单独列)

六、 位图索引

1、 何时创建:

列中有非常多的重复的值时候。例如某列保存了 “性别”信息。

Where 条件中包含了很多OR操作符。

较少的update操作,因为要相应的跟新所有的bitmap

2、 结构:位图索引使用位图作为键值,对于表中的每一数据行位图包含了TRUE(1)、FALSE(0)、或NULL值。

3、 优点:位图以一种压缩格式存放,因此占用的磁盘空间比标准索引要小得多

4、 语法:CREATE BITMAP INDEX index ON table (column[, column]...);

5、 掩饰:

create table bitmaptable as select * from indextable where owner in('SYS','PUBLIC');

分析,查找,建立索引,查找

七、 基于函数的索引

1、 何时创建:在WHERE条件语句中包含函数或者表达式时

2、 函数包括:算数表达式、PL/SQL函数、程序包函数、SQL函数、用户自定义函数。

3、 语法:CREATE INDEX index ON table (FUNCTION(column));

4、 演示

必须要分析表,并且 query_rewrite_enabled=TRUE

或者使用提示/*+ INDEX(ic_index)*/

八、 反向键索引

目的:比如索引值是一个自动增长的列:

多个用户对集中在少数块上的索引行进行修改,容易引起资源的争用,比如对数据块的等待。此时建立反向索 引。

性能问题:

语法:

重建为标准索引:反之不行

九、 键压缩索引

比如表landscp的数据如下:

site feature job

Britten Park, Rose Bed 1, Prune

Britten Park, Rose Bed 1, Mulch

Britten Park, Rose Bed 1,Spray

Britten Park, Shrub Bed 1, Mulch

Britten Park, Shrub Bed 1, Weed

Britten Park, Shrub Bed 1, Hoe

……

查询时,以上3列均在where条件中同时出现,所以建立基于以上3列的组合索引。但是发现重复值很多,所以考虑压缩特性。

Create index zip_idx

on landscp(site, feature, job)

compress 2;

将索引项分成前缀(prefix)和后缀(postfix)两部分。前两项被放置到前缀部分。

Prefix 0: Britten Park, Rose Bed 1

Prefix 1: Britten Park, Shrub Bed 1

实际所以的结构为:

0 Prune

0 Mulch

0 Spray

1 Mulch

1 Weed

1 Hoe

特点:组合索引的前缀部分具 有非选择性时,考虑使用压缩。减少I/O,增加性能。

十、 索引组织表(IOT)

将表中的数据按照索 引的结构存储在索引中,提高查询速度。

牺牲插入更新的性能,换取查询 性能。通常用于数据仓库,提供大量的查询,极少的插入修改工作。

必须指定主键。插入数据时,会根据主键列进行B树索引排序,写入磁盘。

十一、 分区索引

簇:

A cluster is a group of tables that share the same data blocks because they share common columns and are often used together.

十二、创建索引的一些规则:

1>、权衡索引个数与DML之间关系,DML也就是插入、删除数据操作。

这里需要权衡一个问题,建立索引的目的是为了提高查询效率的,但建立的索引过多,会影响插入、删除数据的速度,因为我们修改的表数据,索引也要跟着修改。这里需要权衡

我们的操作是查询多还是修改多。

2>、把索引与对应的表放在不同的表空间。

当读取一个表时表与索引是同时进行的。如果表与索引和在一个表空间里就会产生资源竞争,放在两个表这空就可并行执行。

3>、最好使用一样大小是块。

Oracle默认五块,读一次I/O,如果你定义6个块或10个块都需要读取两次I/O。最好是5的整数倍更能提高效率。

4>、如果一个表很大,建立索引的时间很长,因为建立索引也会产生大量的redo信息,所以在创建索引时可以设置不产生或少产生redo信息。只要表数据存在,索引失败了大不了

再建,所以可以不需要产生redo信息。

5>、建索引的时候应该根据具体的业务SQL来创建,特别是where条件,还有where条件的顺序,尽量将过滤大范围的放在后面,因为SQL执行是从后往前的。

oracle中的index函数,Oracle中的索引详解(整理)相关推荐

  1. 站长在线python精讲:在Python中使用len()函数计算字符串的长度详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用len()函数计算字符串的长度详解>.本知识点主要内容有:在Python中使用len()函数计算字符串在 ...

  2. oracle中常见索引,Oracle中的索引详解(整理)

    一. ROWID的概念 存储了row在数据文件中的具体位置:64位 编码的数据,A-Z, a-z, 0-9, +, 和 /, row在数据块中的存储方式 SELECT ROWID, last_name ...

  3. index函数用法python_python中的index函数 Python中的index一般是什么意思,怎么个用法?...

    python列表中重复元素的index怎样一一列出? #!usr/bin/python resList = [] resList1 = [1,2,3,1,3] resList2 = [] for i ...

  4. Matlab库中过采样函数rcosflt参数及源代码详解(翻译)

    函数定义 rcosflt函数作为MATLAB即将被替换的函数,在MATLAB R2018b中还可以使用,但是已经查不到帮助文档:虽说是要即将被替换,但是函数内部的原理其实都是一样的,这个函数搞懂了,不 ...

  5. php中关于img2thumb函数的图片裁剪规则详解

    首先人为设定一个尺寸比如250*150,那么系统就会根据你设定的尺寸, 自动对 上传的图片进行宽高比换算,同时遵循等比例缩放原则. 1.比如例1: 上传了1476*830尺寸的图片,那么计算机就会自动 ...

  6. oracle数据库中索值,Oracle数据库中的索引详解

    Oracle数据库中的索引详解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 ROWID的概念 存储了row在数据文 ...

  7. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  8. python中index方法详解_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  9. Linux服务端开发——Linux中stat函数和stat命令使用详解

    这篇文章主要介绍了Linux中stat函数和stat命令使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 stat函数和s ...

最新文章

  1. 公有云环境下应用程序的自动化部署与水平扩展问题
  2. 链表面试题Java实现【重要】
  3. 求求你不要手写redis 缓存set,get
  4. docker overview
  5. 神奇的 Object.defineProperty 解释说明
  6. java改变变量编码方式_Java 10将如何改变您的编码方式
  7. 轮番滑动PHP,touch事件之滑动判断(左右上下方向)
  8. Flume-概述-安装
  9. 中国摊铺设备市场趋势报告、技术动态创新及市场预测
  10. 付费?广告?捐款?如何让开源软件活下去?
  11. 【1】redis的安装和配置,以及简单的增删查改uinx命令
  12. WPF 使用值转换器进行绑定数据的转换IValueConverter
  13. java 第一 二章作业,Java私塾跟我学系列——JAVA篇 第二章 基础语法 作业
  14. 二、ArcGIS中shp裁剪dem
  15. python islower方法_(验证)Python中不同类型的islower()方法
  16. python 将微信聊天记录生成词云
  17. PCIe及PCB设计要求
  18. js 获取某一天的前一天时间或者后一天时间
  19. Android开发之那些好用的数据结构与API(二)
  20. 按下组合键 可以迅速锁定计算机,电脑快速锁屏快捷键

热门文章

  1. 滴滴出行app——网约车出行的背后(上)
  2. 注销Apple ID账号
  3. Windows 10便笺更新 修复中文/日文输入问题
  4. DTV 学习(一) 基本概念、分类
  5. bootice工具修复linux,使用bootice工具修复引导问题教程
  6. react源码中的fiber架构
  7. 决定未来的八大核心科技
  8. 5号字对应的数字字号_请问在WORD文档里,字体大小所对应的用数字表示是多少...
  9. 18天精读掌握《费曼物理学讲义卷一》 第1天 2019/6.12
  10. 电脑CPU占用率100%如何处理 电脑CPU占用率100%解决方法