Oracle数据库中的索引详解

Oracle数据库中的索引详解,第1张

一 ROWID的概念

存储了row在数据文件中的具 *** 置 位编码的数据 A Z a z + 和 /

row在数据块中的存储方式

SELECT ROWID last_name FROM hr employees WHERE department_id =

比如 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

具体到特定的物理文件

索引的概念

类似书的目录结构

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

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

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

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

语法 CREATE INDEX index ON table (column[ column] )

B tree结构(非bitmap)

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

表 emp

目标 查询Frank的工资salary

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

 [试验]测试索引的作用

运行/rdbms/admin/utlxplan 脚本

建立测试表

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

set autotrace trace explain

set timing on

分析表 可以得到cost

查询 object_name= DBA_INDEXES

在object_name列上建立索引

再查询

[思考]索引的代价

插入 更新

 三 唯一索引

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

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

语法 CREATE UNIQUE INDEX index ON table (column)

演示

四 组合索引

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

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

演示(组合列 单独列)

 五 位图索引

何时创建

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

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

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

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

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

语法 CREATE BITMAP INDEX index ON table (column[ column] )

掩饰

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

分析 查找 建立索引 查找

 六 基于函数的索引

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

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

语法 CREATE INDEX index ON table (FUNCTION(column))

演示

必须要分析表 并且query_rewrite_enabled=TRUE

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

七 反向键索引

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

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

性能问题

语法

重建为标准索引 反之不行

 八 键压缩索引

比如表landscp的数据如下

site feature job

Britten Park Rose Bed Prune

Britten Park Rose Bed Mulch

Britten Park Rose Bed Spray

Britten Park Shrub Bed Mulch

Britten Park Shrub Bed Weed

Britten Park Shrub Bed Hoe

……

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

Create index zip_idx

on landscp(site feature job)

press

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

Prefix : Britten Park Rose Bed

Prefix : Britten Park Shrub Bed

实际所以的结构为

Prune

Mulch

Spray

Mulch

Weed

Hoe

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

九 索引组织表(IOT)

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

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

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

 十 分区索引

簇:

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

lishixinzhi/Article/program/Oracle/201311/17769

一 物理结构

数据文件 ORACLE数据库包含若干数据文件 数据文件存储数据库数据 包括表 索引等等 数据文件的几个特点

)一个数据文件只允许分配给一个数据库

)数据文件可设置为自动扩展

)一个或多个数据文件构成表空间

在进行数据库 *** 作的时候 数据库先从内存寻找要 *** 作的数据 如果没有找到的话 再从数据文件取出数据放在内存中 然后才对内存中的数据进行相关的 *** 作 *** 作完的数据并没有立即写到数据文件中(这样减少了磁盘的IO) 而是放在内存中 然后由DBWn进程决定何时批量写入数据文件

控制文件 每一个数据库都有一个或多个控制文件 控制文件包含了数据库的物理结构 包括

)数据库名

)数据文件名及位置

)重做日志文件名及位置

)数据库的建立时间等等

一般一个数据库都有若干个控制文件镜像 数据库在打开的时候(ALTER

DATABASE OPEN) 会读取控制文件中的信息来打开数据库 当数据库的物理结构发生变化的时候 比如增加一个数据文件 一组重做日志等等 控制文件都会自动地做相应的修改 在数据库物理结构发生变化后 最好重新备份一下控制文件 用于数据库恢复

重做日志文件 重做日志中记录了数据的变化 一般一个数据库都会有两到三组重做日志文件 同一日志组的镜像最好分布于不同的磁盘上

归档日志 当数据库启动归档的时候 重做日志会被自动归档到指定的位置

初始化参数文件 包含了数据库启动时的配置信息

警告和跟踪日志文件

)跟踪文件 每一个后台进程都有一个单独的跟踪文件 比如当系统发现某一个进程有问题的时候 相关的信息就会写到相应的跟踪文件中 可以从数据库的跟踪文件来发现和调试数据库的错误

)警告文件 也叫警告日志 是一个特别的跟踪文件 它记录着数据库启动 运行中的相关信息 它是按时间顺序进行记录的

备份文件

二 逻辑结构

表空间 相关逻辑对象的集合 在oracle g中 在创建数据库的时候就自动创建了SYSTEM和SYSAUX表空间

数据块 数据存储在数据块中 一个数据块的大小(DB_BLOCK_SIZE)由 *** 作系统块来决定 可以指定 种 分别为 K K K K K

区 一系列连续的数据块组成区 区存储特定类型的数据 比如索引 表等等

段 由一系列区组成段

)数据段 对于每一个非聚集表有一数据段 表的所有数据存放在该段 每一聚集有一个数据段 聚集中每一个表的数据存储在该段中 分区表中的每一个分区有一个数据段 分区中的数据存储在该段中

)索引段 每一个索引有一索引段 存储索引数据 分区索引中的每一分区有一个索引段

)回滚段 用于临时存储要撤消的信息 这些信息用于生成读一致性数据库信息 在数据库恢复时使用 回滚未提交的事务 系统回滚段用于处理系统事务 不建议用户使用系统回滚段来做其它 *** 作

lishixinzhi/Article/program/Oracle/201311/17699

关于ORACLE数据库结构的简介

ORACLE的数据库结构大家都了解吗?如果不了解,下面我为大家整理了关于ORACLE数据库结构简介的文章,希望能为你提供帮助:

一、物理结构:

1、数据文件:ORACLE数据库包含若干数据文件,数据文件存储数据库数据,包括表、索引等等。数据文件的几个特点:

1)一个数据文件只允许分配给一个数据库

2)数据文件可设置为自动扩展

3)一个或多个数据文件构成表空间

在进行数据库 *** 作的时候,数据库先从内存寻找要 *** 作的数据,如果没有找到的话,再从数据文件取出数据放在内存中,然后才对内存中的数据进行相关的 *** 作。 *** 作完的数据并没有立即写到数据文件中(这样减少了磁盘的IO),而是放在内存中,然后由DBWn进程决定何时批量写入数据文件。

2、控制文件:每一个数据库都有一个或多个控制文件,控制文件包含了数据库的物理结构,包括:

1)数据库名

2)数据文件名及位置

3)重做日志文件名及位置

4)数据库的建立时间等等

一般一个数据库都有若干个控制文件镜像。数据库在打开的时候(ALTER

DATABASE OPEN),会读取控制文件中的信息来打开数据库。当数据库的物理结构发生变化的时候,比如增加一个数据文件、一组重做日志等等,控制文件都会自动地做相应的修改。在数据库物理结构发生变化后,最好重新备份一下控制文件,用于数据库恢复。

3、重做日志文件:重做日志中记录了数据的变化。一般一个数据库都会有两到三组重做日志文件。同一日志组的镜像最好分布于不同的磁盘上。

4、归档日志:当数据库启动归档的时候,重做日志会被自动归档到指定的位置。

5、初始化参数文件:包含了数据库启动时的配置信息

6、警告和跟踪日志文件

1)跟踪文件:每一个后台进程都有一个单独的'跟踪文件,比如当系统发现某一个进程有问题的时候,相关的信息就会写到相应的跟踪文件中。可以从数据库的跟踪文件来发现和调试数据库的错误。

2)警告文件,也叫警告日志。是一个特别的跟踪文件,它记录着数据库启动、运行中的相关信息,它是按时间顺序进行记录的。

7、备份文件

二、逻辑结构

1、表空间:相关逻辑对象的集合。在oracle10g中,在创建数据库的时候就自动创建了SYSTEM和SYSAUX表空间。

2、数据块:数据存储在数据块中,一个数据块的大小(DB_BLOCK_SIZE)由 *** 作系统块来决定。可以指定5种,分别为2K、4K、8K、16K、32K。

3、区:一系列连续的数据块组成区,区存储特定类型的数据,比如索引,表等等。

4、段:由一系列区组成段。

1)数据段:对于每一个非聚集表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表的数据存储在该段中。分区表中的每一个分区有一个数据段,分区中的数据存储在该段中。

2)索引段:每一个索引有一索引段,存储索引数据。分区索引中的每一分区有一个索引段。

3)回滚段:用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息,在数据库恢复时使用,回滚未提交的事务。系统回滚段用于处理系统事务,不建议用户使用系统回滚段来做其它 *** 作。

4)临时段:当一个SQL语句需要临时工作区时,由ORACLE建立临时段。当语句执行完毕,临时段的区退回给系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6699235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存