博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORALCE10G 位图索引探究
阅读量:6450 次
发布时间:2019-06-23

本文共 3196 字,大约阅读时间需要 10 分钟。

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

实验执行人

王涛

指导人

徐戟,储学荣

创建时间

2014年5月25日星期日 23:43

修改时间

2014年5月27日星期日 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                           键值:小写字母a的ascii

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                       键值:小写字母a的ascii值

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                       键值:小写字母b的ascii值

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

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

 

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

   插入键值a

转载地址:http://lvmwo.baihongyu.com/

你可能感兴趣的文章
for 语法
查看>>
UIView的常见属性
查看>>
容器时代CI/CD平台中的Kubernetes调度器定制方法
查看>>
Yahoo的14条准则
查看>>
Working with labelled Data
查看>>
Hadoop HA 双namenode搭建
查看>>
优化Mysql分页
查看>>
excel模板增加扩展辅助数据的配置
查看>>
烂泥:高负载均衡学习haproxy之TCP应用
查看>>
Python开发例程大全
查看>>
Micropython教程之TPYBoard制作蓝牙+红外循迹小车
查看>>
HP ILO 连接桌面问题
查看>>
不碰皮肤即可监测生命体征
查看>>
未清销售订单及预测的所有工序物料需求(按BOM展开不考虑已发料)
查看>>
iOS实战:第三方登陆weibo/weixin/qq集成
查看>>
3DTouch使用
查看>>
浅思docker和大数据
查看>>
我的友情链接
查看>>
Azkaban的线程系列 37:QueueProcessor线程的任务处理&executor存活监控
查看>>
Android切近实战(五)
查看>>