社区
基础和管理
帖子详情
关于 BITMAP index ?????
fxbsmile
2003-01-15 10:05:42
test表的A字段值范围为(1,2,3,4,5),现在在这个字段上建了一个BITMAP INDEX
现在 select * from test where a=5 ;
可为什么在解释计划里依然是用全表扫描,,,
难道不能利用,,
谢谢........
...全文
90
11
打赏
收藏
关于 BITMAP index ?????
test表的A字段值范围为(1,2,3,4,5),现在在这个字段上建了一个BITMAP INDEX 现在 select * from test where a=5 ; 可为什么在解释计划里依然是用全表扫描,,, 难道不能利用,, 谢谢........
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
建议看一下这篇文章
Bitmap
index
AND
bitmap
join
index
Bitmap
index
的主要思想就是,针对每一个可能的值x,建立一个或一组位图映射,每个bit为1代表这个位置的值等于x,为0则不等于x。 而每个位置都可以直接映射到某一行的rowid。由于在执行DML操作时,锁定的是整个
bitmap
,而不是
bitmap
中的某个位,所以
bitmap
index
对于并发DML的性能很差,而且频繁的DML操作会使得
bitmap
index
的空间效率大打折扣,所
Bitmap
Index
Scan
Bitmap
Index
Scan 数据库里面的表的扫描方式主要是以下几种方式:sequential scans,
index
scans, and
bitmap
index
scans,当然还有
index
only scan,这种算是
index
scans中比较特殊的一种,需要的信息在索引中都能找到,扫描索引即可,不需要去扫描表。 这篇文章主要谈谈Bi...
bitmap
索引 MySQL,Oracle
Bitmap
Index
ORACLE的
bitmap
索引,我们用的很少。在我们的常理认识当中,我们用的最多就是类似性别,类型这种属性的字段,因为他们字段的种类Oracle的
bitmap
索引,我们用的很少。在我们的常理认识当中,我们用的最多就是类似性别,类型这种属性的字段,因为他们字段的种类很少。其实
BITMAP
还是有很多优势以及一些特性的。首先在传统的
INDEX
里,我们在索引的存储上,一般是分为:header+
index
...
Bitmap
join
index
http://space.itpub.net/193161/viewspace-50192
Bitmap
index
的主要思想就是,针对每一个可能的值x,建立一个或一组位图映射,每个bit为1代表这个位置的值等于x,为0则不等于x。而每个位置都可以直接映射到某一行的rowid。由于在执行DML操作时,锁定的是整个
bitmap
,而不是
bitmap
中的某个位,所以
bitmap
index
对于并发DML的性能很差,而且频繁的DML操作会使得
bitmap
index
的
Oracle
Bitmap
Index
Oracle的
bitmap
索引,我们用的很少。在我们的常理认识当中,我们用的最多就是类似性别,类型这种属性的字段,因为他们字段的种类很少。其实
BITMAP
还是有很多优势以及一些特性的。 首先在传统的
INDEX
里,我们在索引的存储上,一般是分为:header+
index
length+
index
value+rowid组成。如图:
bitmap
的存储结果相对来...
基础和管理
17,377
社区成员
95,112
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章