ORALCE10G 位图索引探究

简介: ORALCE10G 位图索引探究 1. 实验目的     研究对oracle数据库位图索引进行DML操作的探究,加深理解位图索引的原理,指导实践中的应用。

ORALCE10G 位图索引探究

1. 实验目的

    研究对oracle数据库位图索引进行DML操作的探究,加深理解位图索引的原理,指导实践中的应用。

2. 实验环境

操作系统平台

Linux MyOracle 2.6.9-78.EL #1 Wed Jul 9 15:27:01 EDT 2008 i686 i686 i386 GNU/Linux

数据库版本

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Prod

实验执行人

王涛

指导人

徐戟,储学荣

创建时间

2014525日星期日 23:43

修改时间

2014527日星期日 18:11

3. 知识准备

位图索引主要针对大量相同值的列,具体概念就不再索引块的一个索引行中存储键值起止Rowid,以及这些键值的位置编码(位图编码),位置编码中的每一位表示键值对应的数据行的有无。一个块可能指向的是几十甚至成百上千行数据的位置。这种方式存储数据,相对于B*Tree索引,占用的空间非常小,创建和使用非常快。当根据键值查询时,可以根据起始Rowid和位图状态,快速定位数据。

位图索引的位图在索引块上存储形式:

Leaf block dump

===============

header address 213972084=0xcc0f474

kdxcolev 0

KDXCOLEV Flags = - - -

kdxcolok 0

kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y

kdxconco 4

kdxcosdc 1

kdxconro 2                     ---表示本索引块上索引位图的数量

kdxcofbo 40=0x28

kdxcofeo 7114=0x1bca

kdxcoavs 7916

kdxlespl 0

kdxlende 0

kdxlenxt 0=0x0

kdxleprv 4254997=0x40ed15

kdxledsz 0

kdxlebksz 8008                ----索引块的大小(8008bytes

/*下面为位图索引的结构,由4个字段组成

row#0[7982] flag: ------, lock: 0, len=26

col 0; len 2; (2):  c1 03                     ---存储位图的键值:2

col 1; len 6; (6):  00 00 00 00 00 00         ---索引rowid的起始地址

col 2; len 6; (6):  00 40 e8 e2 00 0f         ---索引rowid的结束地址

col 3; len 6; (6):  c3 83 b4 d2 bc 01         ---位图信息

row#1[7936] flag: ------, lock: 0, len=26

col 0; len 2; (2):  c1 06

col 1; len 6; (6):  00 00 00 00 00 00

col 2; len 6; (6):  00 40 ed 76 01 3f

col 3; len 6; (6):  c5 ed 87 d9 bc 01

----- end of leaf block dump -----

4. 实验步骤

4.1 位图索引属性验证

4.1.1  准备工作

创建表:CREATE TABLE BM_TMP(CODE CHAR(1));

创建位图索引:CREATE BITMAP INDEX IDX_BM_T ON BM_TMP (CODE);

4.1.2  验证1:每个键值生成一个位图,不同键值生成不同的位图?

具体步骤:

1.查找表BM_TMP对应的位图索引IDX_BM_T存储的位置:

SELECT FILE_ID,EXTENT_ID,BLOCK_ID,BLOCKS

FROM DBA_EXTENTS

WHERE SEGMENT_NAME='IDX_BM_T';

FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

----------     ----------     ----------     ----------

1          0      60809          8

2).查看索引的存储情况:

alter system dump datafile 1 block 60810;

查看跟踪日志:

Branch block dump

=================

header address 213972036=0xcc0f444

……

kdxconro 1

……

row#0[8049] dba: 4255116=0x40ed8c

col 0; len 1; (1):  2a

col 1; TERM

----- end of branch block dump -----

 

3).插入数据:

  • 插入键值 a:

SQL> insert into bm_tmp values('a');

1 row created.

SQL> commit;

Commit complete.

 

SQL> alter system dump datafile 1 block 60810;

System altered.

查看跟踪日志:

Leaf block dump

===============

header address 213972060=0xcc0f45c

……

kdxconro 1

……

row#0[7988] flag: ------, lock: 2, len=25

col 0; len 1; (1):  61                           键值:小写字母aascii

col 1; len 6; (6):  00 00 00 00 00 00

col 2; len 6; (6):  00 40 ed 82 00 07

col 3; len 6; (6):  c0 a2 90 d9 bc 01              位图信息编码

 

  • 插入键值 b:

SQL> insert into bm_tmp values('b');

1 row created.

SQL> commit;

Commit complete.

 

SQL> alter system dump datafile 1 block 60810;

System altered.

查看跟踪日志:

Leaf block dump

===============

header address 213972060=0xcc0f45c

……

kdxconro 2

……

row#0[7988] flag: ------, lock: 0, len=25

col 0; len 1; (1):  61                       键值:小写字母aascii

col 1; len 6; (6):  00 00 00 00 00 00

col 2; len 6; (6):  00 40 ed 82 00 07

col 3; len 6; (6):  c0 a2 90 d9 bc 01

row#1[7944] flag: ------, lock: 2, len=25

col 0; len 1; (1):  62                       键值:小写字母bascii

col 1; len 6; (6):  00 00 00 00 00 00

col 2; len 6; (6):  00 40 ed 82 00 07

col 3; len 6; (6):  c1 a2 90 d9 bc 01

----- end of leaf block dump -----

小结:当表中插入ab两个不同键值时会分别生成两个键值对应的位图。

 

4.1.3  验证2:当插入有相同的键值记录会不会重新生成一个新的位图?

   插入键值a

目录
相关文章
|
3月前
|
存储 算法 关系型数据库
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
68 0
|
10月前
|
存储 索引
【软考学习15】索引文件结构、直接索引和间接索引
【软考学习15】索引文件结构、直接索引和间接索引
254 0
|
8月前
|
存储 人工智能 测试技术
唯一索引比普通索引快吗?运行原理是什么?
唯一索引比普通索引快吗?运行原理是什么?
78 0
|
SQL 存储 缓存
霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理
举凡后端面试,面试官不言数据库则已,言则必称SQL优化,说起SQL优化,网络上各种“指南”和“圣经”难以枚举,不一而足,仿佛SQL优化已然是妇孺皆知的理论常识,然后根据多数无知(Pluralistic ignorance)理论,人们印象里觉得多数人会怎么想怎么做,但这种印象往往是不准确的。那SQL优化到底应该怎么做?本次让我们褪去SQL华丽的躯壳,以最浅显,最粗俗,最下里巴人的方式讲解一下SQL优化的前因后果,前世今生。
霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理
|
SQL 关系型数据库 MySQL
MySql基础-笔记11-临时表、复制表、元数据、序列使用
MySql基础-笔记11-临时表、复制表、元数据、序列使用
134 0
MySql基础-笔记11-临时表、复制表、元数据、序列使用
|
存储 Oracle 关系型数据库
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
123 0
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
|
存储 关系型数据库 MySQL
整体结构&InnoDB数据字典(1) --系统表空间结构(三十三)
整体结构&InnoDB数据字典(1) --系统表空间结构(三十三)
|
SQL 关系型数据库 数据库
MySQL优化系列(二)--查找优化(1)(非索引设计)
MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高级用法后面文章再讲),先讲单表查优化,再讲多表查优化。
1766 0
|
SQL 存储 索引
sql server 索引阐述系列七 索引填充因子与碎片
原文:sql server 索引阐述系列七 索引填充因子与碎片 一.概述     索引填充因子作用:提供填充因子选项是为了优化索引数据存储和性能。 当创建或重新生成索引时,填充因子的值可确定每个叶级页上要填充数据的空间百分比,以便在每一页上保留一些剩余存储空间作为以后扩展索引的可用空间,例如:指定填充因子的值为 80 表示每个叶级页上将有 20% 的空间保留为空,以便随着向基础表中添加数据而为扩展索引提供空间。
1067 0