BlueSky0524 2014-06-27 03:11
浏览 1679

Oracle中重复率很高的字段创建B树索引,为什么性能可以得到大幅提升

请教一个让我不解的问题:
我有一张表TT,数据大概是240W,其中的一个字段COL1的值只有‘0’和‘1’两个。现在有如下查询:SELECT COL2,SUM(NVL(COL3,0) * nvl(COL4,0))
FROM TT
WHERE COL1 = '0'
GROUP BY COL2;
在查询耗时大概是 50s。
为了提高性能,在TT表的COL1字段上创建了位图索引,查询耗时变为 2s
但是由于我需要对TT表做大量的Insert和Update操作,位图索引锁表的风险很大,所以只能放弃使用。
因为TT表的数据量还在增大,我们的DBA建议我把这个表修改为分区表,但是,我自己又不想动生产的数据库。所以在COL1上建了一个普通B树索引试了下,发现性能大幅提升,耗时也是2s左右,B树索引起了很大作用。
在我的概念里,重复率高的字段是肯定不适合建B树索引的,强制使用B树索引反而会因为增加索引开销,比全表扫描还要慢些。所以请教各位高手,在COL1字段上建B树索引为什么可以起到这样的效果?

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题