关于 BITMAP index ?????

fxbsmile 2003-01-15 10:05:42
test表的A字段值范围为(1,2,3,4,5),现在在这个字段上建了一个BITMAP INDEX

现在 select * from test where a=5 ;

可为什么在解释计划里依然是用全表扫描,,,

难道不能利用,,

谢谢........

...全文
58 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
biti_rainy 2003-01-16
  • 打赏
  • 举报
回复
14条数据,不是10条
sorry
biti_rainy 2003-01-16
  • 打赏
  • 举报
回复
我想
如果是 select count(*) from test where a=5 ;
应该会使用 bitmap索引的
最好做一次analyze

但是 select * from test where a=5 ;
你认为使用索引会比较快么?
假如数据覆盖有 20% ,你认为通过索引会很快?

你知道bitmap的索引结构嘛

col value bitmap数据(bit)(开始rowid x,终止rowid x+ 14)
1 00011101010101
2 10100000000000
3 01000010000000
4 00000000100000
5 00000000001010

上面是一个例子了,包含数据条数为 bit 数量 10条数据,假设数据全部连续存储在磁盘上
这样的结构下
bitmap 只存储了起始rowid 和 结束rowid并且不用重复的保存column value
从而降低了IO

wanghai 2003-01-16
  • 打赏
  • 举报
回复
你试着插大量数据进去看看
wanghai 2003-01-16
  • 打赏
  • 举报
回复
我想索引是基于数据块的,如果你所有数据都在一个数据块上,就会产生全表扫描
wanghai 2003-01-16
  • 打赏
  • 举报
回复
A字段是什么类型的?
hrb_qiuyb 2003-01-16
  • 打赏
  • 举报
回复
其实 penitent(只取一瓢) 兄说得满好的,不过我还要进行一下补充。

对于一个表在查询时所使用的查询计划,取决于以下几点。
1、optimizer_mode初始化参数,其默认值为choose即如一个表有索引,没statistics信息,则表在查询在查询时执行基于规则(rule),否则执行基于代价(cost)的检索方式。

2、还有一个重要的因素是表的大小,如果优化器发现表只有几行的数据,即使有索引它也不会考虑的,而不是是否是因为bitmap index的因素。
pausing 2003-01-16
  • 打赏
  • 举报
回复
还要看你的sql优化方法。
penitent 2003-01-16
  • 打赏
  • 举报
回复
位图索引适合与低聚合度,大型,少量写操作的数据仓库
如性别等字段
如果仅仅在一个字段上建立位图索引,是没有什么效果的
位图索引适合于多个位图索引列联合检索的时候,会有很好的效果
如where a=5 and b=false and c=0假如a,b,c上都有位图索引
------------------
注意,大量写操作的表建立位图索引会降低性能
关于具体的说明,请参考文档
wanghai 2003-01-16
  • 打赏
  • 举报
回复
hrb_qiuyb(大森林) 说的第2点这篇文章中也提到了,建议加大数据量测试
注意这一句话
the optimizer felt pretty sure that 1/3(一个比较大的数值) of the table
would be accessed via the index and hence a full scan was in order
wanghai 2003-01-16
  • 打赏
  • 举报
回复
http://asktom.oracle.com/pls/ask/f?p=4950:8:1878747::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:961030020653,%7Bbitmap%7D
wanghai 2003-01-16
  • 打赏
  • 举报
回复
建议看一下这篇文章

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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