位图索引与 B-tree 索引:选择与时间 进来解释一下

microns 2008-11-02 05:06:33
今天看了oracle B-TREE和bitmap索引,在网上查了资料http://www.oracle.com/technology/global/cn/pub/articles/sharma_indexes.htmloracle官方解释
但是还是没有怎么明白
我自己的理解是,有序表的话使用b-tree索引要好些,无序的表使用bitmap要好些
但是这种理解,感觉很肤浅,望高人指点,谢谢
...全文
741 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyi8903 2008-11-03
  • 打赏
  • 举报
回复
这与算法有关系,bitmap本身就是选择性比较低的列比较使用,如性别,

但在oltp中,频繁的更新操作会导致大量的enqueue events出现.

而且是btree,则是选择性越高越好,如在sequence上面的b-tree(当然该索引上的块竞争是另外一回事)
vc555 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 microns 的回复:]
书上下的结论:
b-tree索引可能更适合于OLTP系统,因为在OLTP系统中DML的操作比较频繁。
bitmap索引更适合于Data Warehouse系统,因为在Data Warehouse系统中表一般都比较大但是静态的并且查询较为复杂
[/Quote]
和我结论一样。
:D
vc555 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 microns 的回复:]
我查阅了相关书籍,有句话这样说的,望高手帮我理解一下,谢谢
在位图索引中修改键值列需要使用段一级的锁,而B-TREE索引使用的是行一级的锁
[/Quote]
3L不是都给你解释过了吗?这里的“段一级”,就是指表段。
microns 2008-11-02
  • 打赏
  • 举报
回复
书上下的结论:
b-tree索引可能更适合于OLTP系统,因为在OLTP系统中DML的操作比较频繁。
bitmap索引更适合于Data Warehouse系统,因为在Data Warehouse系统中表一般都比较大但是静态的并且查询较为复杂
microns 2008-11-02
  • 打赏
  • 举报
回复
我查阅了相关书籍,有句话这样说的,望高手帮我理解一下,谢谢
在位图索引中修改键值列需要使用段一级的锁,而B-TREE索引使用的是行一级的锁
vc555 2008-11-02
  • 打赏
  • 举报
回复
位图索引没用过。
这东西只在OLAP或者数据仓库中用,或者你的表只读也行。
有DML操作的表一般都不会用位图索引的。带来的后果会非常严重。
BlueskyWide 2008-11-02
  • 打赏
  • 举报
回复
Vivek Sharma是Oracle认证专家,擅长于性能调整和SQL-PL/SQL 优化。
看来,性能优化的一切都来自于测试!
敬佩此等高手!


贴引:

1.位图索引,它使用索引来响应该查询。
B-tree 索引,优化程序选择了全表扫描;


2.位图索引也可以索引空值(与 B-tree 索引不同)。

3.DSS 系统中的位图索引支持即席查询;
B-tree 索引不支持即席查询。

4.B-tree 索引更适合于 OLTP 应用程序;
使用位图索引,优化程序可以有效地响应包括 AND、OR 或 XOR 的查询;

5.对于 B-tree 索引,它会考虑群集因子的值;
使用位图索引生成执行计划时,该优化程序不考虑群集因子的值。

"有序表的话使用b-tree索引要好些,无序的表使用bitmap要好些。" --楼主的理解看来是正确的。


xiaodong_1567 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 BlueskyWide 的回复:]
楼主的这个贴子不错啊,才看到:

很清楚在此表中,B-tree 索引比 EMPNO 列上的位图索引更小...

[/Quote]
一个存储具体值一个用bit表示当然少得多
BlueskyWide 2008-11-02
  • 打赏
  • 举报
回复
楼主的这个贴子不错啊,才看到:

很清楚在此表中,B-tree 索引比 EMPNO 列上的位图索引更小...


[Quote=引用楼主 microns 的帖子:]
今天看了oracle B-TREE和bitmap索引,在网上查了资料http://www.oracle.com/technology/global/cn/pub/articles/sharma_indexes.htmloracle官方解释
但是还是没有怎么明白
我自己的理解是,有序表的话使用b-tree索引要好些,无序的表使用bitmap要好些
但是这种理解,感觉很肤浅,望高人指点,谢谢
[/Quote]
tianyazifan 2008-11-02
  • 打赏
  • 举报
回复
谢谢分享。请问如何建立位图索引?我还是baidu一下吧。
xiaodong_1567 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 microns 的回复:]
那如果使用bitmap,岂不是很差,一个用户修改一条信息,他把相同的记录都锁住了?
[/Quote]
所以只有重复性高,且不大更改的才适合
microns 2008-11-02
  • 打赏
  • 举报
回复
那如果使用bitmap,岂不是很差,一个用户修改一条信息,他把相同的记录都锁住了?
xiaodong_1567 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 microns 的回复:]
引用 1 楼 xiaodong_1567 的回复:
bitmap适合字段值基本是重复的,如性别:男和女
但要注意bitmap对于并发操作时,改一条会锁了很多记录,因为在一个索引集上
不知lz明白不

改一条会锁了很多记录,没有明白
[/Quote]
举例 字段A值为





那么每个bitmap索引会有5位
男的条目 11010
女的条目 00101
因为所有的记录在一个都在索引条目上,所以修改或增加时会一起锁定

microns 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaodong_1567 的回复:]
bitmap适合字段值基本是重复的,如性别:男和女
但要注意bitmap对于并发操作时,改一条会锁了很多记录,因为在一个索引集上
不知lz明白不
[/Quote]
改一条会锁了很多记录,没有明白
xiaodong_1567 2008-11-02
  • 打赏
  • 举报
回复
bitmap适合字段值基本是重复的,如性别:男和女
但要注意bitmap对于并发操作时,改一条会锁了很多记录,因为在一个索引集上
不知lz明白不

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧