数据量2百万行,A列仅有男和女两个值,当列取值少时,位图索引的占用空间要比B树索引更小。
非聚集型位图索引所占空间 | 非聚集型B树索引所占空间 | 聚集型B树索引所占空间 |
---|---|---|
2M | 23M | 34M |
1、表结构:
create table A(id int,sex varchar(4));
截图如下:
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;
结果截图如下:
select sex,count(*) from A group by sex order by 1 desc;
截图如下:
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'
结果如下图所示:
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'
截图如下:
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'
截图如下:
文章
阅读量
获赞