oracle值少分布不均的字段适合建什么索引?

我的一个大表大约是5000万条数据,里面有一个字段note_type,它的值为0或者1.
为0的概率是99%,为1的概率是1%,现在我碰到的问题是,当我执行下面的sql的时候:

select * from big_table where note_type=0

结果很快就出来,但当执行:

select * from big_table where note_type=1

的时候,结果要过很久才出来,请问像这样值少且分布不均的字段适合建什么索引,可以提高查询的效率?
最新回答
日暮盼佳人

2024-11-05 10:48:46

一般的b*tree索引就行,比较明显的倾斜列note_type,造成执行计划的偏差,建一下这个列的直方图
exec dbms_stats.gather_table_stats(user,'table bane',method_opt=>’for all columns size skewonly')
追问
我在这个列上建了b*tree索引,但是执行计划里面并不会去使用这个索引,有什么方法可以使查询用到这个索引?
追答
select /*+ index (a 索引名)*/ * from big_table where note_type=1;

select note_type,count(*) from big_table group by note_type;
你看一下note_type=1这个值有多少,超过总行5%以上,全表扫描比索引好
一澜冬雪

2024-11-05 01:30:36

oracle的话
用位图索引试试
create bitmap index index_name on 表名(字段);