注册
位图索引与B树索引所占空间对比
专栏/Database Thinking/ 文章详情 /

位图索引与B树索引所占空间对比

胡li 2023/08/14 1602 2 0
摘要 -

对比结果

数据量2百万行,A列仅有男和女两个值,当列取值少时,位图索引的占用空间要比B树索引更小。

非聚集型位图索引所占空间 非聚集型B树索引所占空间 聚集型B树索引所占空间
2M 23M 34M

验证步骤截图如下:

1、表结构:

create table A(id int,sex varchar(4));

截图如下:
image.png
2、插入数据

begin
for i in 1..1000001 loop
insert into A(id ,sex) values(i,'女');
end loop;
end;
begin
for i in 1000001..2000001 loop
insert into A(id ,sex) values(i,'男');
end loop;
end;

结果截图如下:
image.png
image.png

select sex,count(*) from A group by sex order by 1 desc;

截图如下:
image.png

3、非聚集型B树索引:
--创建非聚集型B树索引IND_A_SEX

create index IND_A_SEX ON A(SEX);

--查询IND_A_SEX所占空间

select INDEX_NAME 索引名称,(INDEX_USED_SPACE(33555630)*page()/1024/1024 )所占空间MB, 
       INDEX_TYPE 索引类型, 
       TABLE_NAME 索引所在表名, 
       object_id 索引ID from user_indexes b, 
       dba_objects o where b.index_name = o.object_name and object_name='IND_A_SEX'

结果如下图所示:
image.png

4、聚集型B树索引:
--创建聚集型B树索引IND_CLUS_A_SEX

CREATE CLUSTER INDEX IND_CLUS_A_SEX on A(SEX); - 

--查询IND_CLUS_A_SEX所占空间

select INDEX_NAME 索引名称,(INDEX_USED_SPACE(33555626)*page()/1024/1024 )所占空间MB, 
       INDEX_TYPE 索引类型, 
       TABLE_NAME 索引所在表名, 
       object_id 索引ID from user_indexes b, 
       dba_objects o where b.index_name = o.object_name and object_name='IND_CLUS_A_SEX'

截图如下:
image.png

5、位图索引:
--创建非聚集型位图索引IND_BITMAP_A_SEX

CREATE  BITMAP INDEX IND_BITMAP_A_SEX ON A(SEX);

--查询IND_BITMAP_A_SEX所占空间

select INDEX_NAME 索引名称,(INDEX_USED_SPACE(33555623)*page()/1024/1024 )所占空间MB, 
       INDEX_TYPE 索引类型, 
       TABLE_NAME 索引所在表名, 
       object_id 索引ID from user_indexes b, 
       dba_objects o where b.index_name = o.object_name and object_name='IND_BITMAP_A_SEX'

截图如下:
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服