楼主: NinGoo

oracle10g对于bitmap index的改进

[复制链接]
招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
11#
 楼主| 发表于 2007-3-27 15:02 | 只看该作者
前面猜的东西还是有不少是不准确的

我们知道bitmap index本身是按照btree来组织的,每个叶块中存储具体的entry,每个entry包含索引值,起始rowid,终止rowid,和位图块四部分。

注意这里的位图块采用了压缩存储的方式,不过只压缩前缀值为0的bit,不压缩值为1的bit和中间的0,每个位图段

使用一个或者多个字节来做为控制位,也就是前面试验中我猜测的 标志长度 字节 和 后面一些有疑问的字节。

简单的描述一下位图块的压缩算法如下:

如果位图块只有一个1,其余全0,则只需要通过控制位来表示该1所在的位置

比如,00 表示 1000 0000,也就是1处在起始rowid的位置
01 表示 0100 0000,也就是1是在起始rowid下一条的位置

这样,只有一条数据的情况下,只需要用一个控制位来表示1的具体位置,而不需要后续的位图块了。最多可以表示1个1+191个0的情况,也就是控制位小于192(0xc0)都表示只有1个值,根据控制位oracle可以知道这个1的具体位置。

如果有多个1,则第一个控制字节的前两个bit一般为11,紧跟的3个bit表示跳过的全0的字节数(注意这里是字节数),如果0的的字节数太多,3个bit全为1以后,就再多分配一个字节,如果第二个字节的最高位变成1,则再分配第三个字节。

第一个控制字节的最后三位则表示控制字节后面的位图块的长度,3个bit只能表示1~8,所以前面试验中可以看出每个位图段都是最多8个字节,后面就会出现新的控制字节了。

这样,前面试验中一些不理解的地方也迎刃而解了。

比如 C8 分解成二进制 11 001 000 表示没有前缀0被压缩

D0 -> 11 010 000 压缩1字节

D8 -> 11 011 000 压缩2字节

E0 -> 11 100 000 压缩3字节

E8 -> 11 101 000 压缩4字节

F0 -> 11 110 000 压缩5字节

F8 00 -> 11 111 000 00000000 压缩6字节

F8 01 -> 11 111 000 00000001 压缩7字节

F8 7F -> 11 111 000 01111111 压缩133字节

F8 80 01 -> 11 111 000 10000000 00000001 压缩134字节

F8 81 01 -> 11 111 000 10000001 00000001 压缩135字节
...

C9 -> 11 001 001 表示压缩0字节,后面的位图段为1字节

CA -> 11 001 010 表示压缩0字节,后面的位图段为2字节

按照上面的算法,基本上位图压缩的算法清楚了

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
12#
 楼主| 发表于 2007-3-27 15:25 | 只看该作者
上面的位图压缩算法是google的时候偶然发现的一个文档中看到的

bitmapindexinternals.ppt

653 KB, 下载次数: 153

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
13#
发表于 2007-3-27 19:30 | 只看该作者
压缩一方面表示 性能的细化,另一个角度上来说,cpu 的性能 比存储的空间和性能 有更大的发掘余地。  就是  目前存储总是比cpu更容易成为瓶颈。 所以用 时间来换空间。

使用道具 举报

回复
论坛徽章:
117
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主7段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32紫蛋头
日期:2013-03-04 17:00:07优秀写手
日期:2013-12-18 09:29:09
14#
发表于 2007-3-28 09:33 | 只看该作者
支持深入研究!

我以前写过一个 Oracle还能压缩什么
http://www.eygle.com/archives/20 ... ext_compressed.html

压缩这个理念,Oracle贯彻的很好

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
15#
发表于 2007-3-28 10:48 | 只看该作者
Good Job

9i的bitmap研究过一阵,也是看了biti的那篇文章之后。

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
16#
发表于 2007-3-28 14:06 | 只看该作者
NINGOO 的专研精神,

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2008-3-20 14:18 | 只看该作者
研究归研究,研究完了来个总结性质的发言呀...举个简单的例子来说明一下bitmap index的工作原理,顺便比较一下于b-tree index的重大区别...说的越形象说明你研究的越透彻,这么一大段东西看了头晕的....

使用道具 举报

回复
招聘 : HTML页面制作
论坛徽章:
74
喜羊羊
日期:2015-04-29 17:32:03夏利
日期:2013-11-30 17:08:44雪佛兰
日期:2013-09-02 10:24:402013年新春福章
日期:2013-02-25 14:51:24蜘蛛蛋
日期:2012-11-26 22:08:56ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32双黄蛋
日期:2012-05-17 22:25:44版主3段
日期:2012-05-15 15:24:11茶鸡蛋
日期:2012-04-06 17:43:25茶鸡蛋
日期:2012-03-26 21:29:09
18#
发表于 2008-3-20 15:00 | 只看该作者
bitmap index还有可以做哪些改进?

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
19#
 楼主| 发表于 2008-6-10 16:57 | 只看该作者
原帖由 l3f3f3 于 2008-3-20 14:18 发表
研究归研究,研究完了来个总结性质的发言呀...举个简单的例子来说明一下bitmap index的工作原理,顺便比较一下于b-tree index的重大区别...说的越形象说明你研究的越透彻,这么一大段东西看了头晕的....


呵呵,说的是,不过这篇东西并不是为了说明bitmap index的工作原理的,只是补充一下一开始提到的biti的帖子,Oracle在10g对于bitmap的处理做了一些改进。假如不太了解bitmap,也不清楚9i的bitmap的机制,直接来看是可能比较难懂

使用道具 举报

回复
论坛徽章:
11
授权会员
日期:2007-07-08 18:54:592009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:蛇
日期:2008-10-24 16:46:51奥运会纪念徽章:现代五项
日期:2008-10-24 13:26:49生肖徽章2007版:羊
日期:2008-04-17 18:05:112008新春纪念徽章
日期:2008-02-13 12:43:03生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
20#
发表于 2008-6-10 20:34 | 只看该作者

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表