
学术论坛
Oracle索引分析与查询优化
崔黎明志远李婧
(武汉晴川学院电子信息工程与机械电子学院湖北武汉430064)
与应用
摘要:Oracle是目前国内在大型数据存储中用得比较多的一种关系型数据库,磁盘降列技术(RAID)和集群接术(RAC)的选用,使Oracle在处理数据效率和数据安全上有非常大的提高,在国内交通、电力,通信和全融等重要领成都有广泛的用途。本文基于Oracle11g版本,对Rowid和索引的原理机制做出分析,并论述利用这些原理对大型数据表查询的优化。
关键调:OracleRowid索引查询
中图分类号:TP311.13
文献标识码:A
在逻辑上,Oracle是由多个表空间构成的,在新建一个表空间的时候,必须指定存储的文件,可以指向多个存储在不同磁盘上的数据,表空间下面分为段、区、块。新建一张表的时候,Oracle数据库就会为它创建一个段。所谓区就是指连续的块(block)构成的空间,般区包含8个空块,block是Oracle数据库最小的数据空间,一般为 8k或16k,当开始往这个表中插人数据的时候,Oralce数据库会自动为这个表分配一个区,并把数据不断往此区进行填充,当数据填满此区后,Oralce数据库会重新为该表分配一个区而不是一个段。实际上,对于我们不同的查询过程中,就是通过一些谓词过滤条件,从对应的数据块中获取正确的一行数据或多行数据。如何快速定位到该
数据行,是一个数据库学习者不断探索的方向。 1Rowid
1.1简介
从字面上理解是行标识的意思,它是Oracle数据库中数据表的 sQL> select rowid,flid fron kjyq_yuf1 ;
ROVID
FLID
AAAD2QAAFAAAAITAAA160 AAAD2QAAFAAAAITAAB161 AAAD2QAAFAAAAITAAC102 AAAD2QAAFAAAAITAAD 183 AAAD2QAAFAAAAITAAE
184
AAAD2QAAFAAAAITAAF
185
AAAD2QAAFAAAAITAAG166 AAAD2QAAFAAAAITAAH187 AAAD2QAAFARAAITAA1108
图1oracle的一个普通表的rowid
SQL> select dbns_rouid.rouid_object(rouid) object_id,
2 3
6
dbns_rouid.rouid_relatiue_fno(rouid) file_id dbns rouid.rouid bleck_nunber(rouid) block_id dbns_rouid.rowid_rou_nunber(rouid) nun
Fron kjyq_dj1x where reunun < 5;
0BJECT_ID
15766 15766 15766 15766
FILE_10 5 5
BL6CK_1D
579 625 579 579
NUN 134
图2oracle数据库把字符串转成数字形式
收稿日期:2016-05-11
文章编号:1007-9416(2016)07-0234-02
一个伪列,用于存放该表中每一行数据的地址,在8i版本之前, Oracle采用受限制的rowid,它是由数据文件编号块编号和数据在该块内的偏移量这三个部分构成,长度为6个字节,因此在8之前的版本中,每个数据库最多可以包含1022个文件,每个文件最多能有 4m个数据块,面每个数据库最多能存储64k条记录。为了突破长度的限制和解决其他一些缺陷,Oracle数据库引入了这样一个概念:相对文件号它的主要特点是改变之前rowid中数据文件编号是整个数据库范围组成的表空间,即文件编号为5的文件不再是数据库中编号为5的数据文件,而是表空间中对应编号的数据文件。如下图1所示为Oracle11g中一个普通表的rowid。
从该图1中可以看到rowid共有18位,分为四部分,格式为: AAAAAABBBCCCCCCDDD,其中AAAAAA六位表示 dataobjectid,根据这个id可以确定该行数据在哪个段中,BBB三位表示相对文件号,通过这个字段号可以用来确定该行数据的绝对文件号;CCCCCC六位表示datablocknumber,它是相对于datafile的编号:最后三位DDD表示该行数据在鄂一行。通过Oracle数据库自带的一些函数可以把字符串转成数字形式图2所示。
1.2rowid的应用
(1)通过rowid查找重复记录的数据,sql如下: SQL> select +
fron kjyq_yuf1
3 5 FLID 113
there rowid not in (select nin(rouid)
fron kjyq_ywf1 group by f1nc);
FLHC
电价管理
(2)通过rowid删除重复记录的方法:
JC2T
SQL>
fron kjyq_yf1
delete
Where rowid not In(Select max(rowid)
2
3 4
已删除1行。 2索引
2.1索引的概念
fron kjyq_yuf1 group By flmc);
一般情况下,用户对数据库最多的操作是进行数据查询,当一
作者简介:崔黎(1983一),女,湖北天门人,颈士,毕业于云南民族大学,助教,研究方向:无线传感网络。 34
方方数据