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条回答

    报告相同问题?

    悬赏问题

    • ¥30 vmware exsi重置后的密码
    • ¥15 易盾点选的cb参数怎么解啊
    • ¥15 MATLAB运行显示错误,如何解决?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容
    • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
    • ¥20 yolov5自定义Prune报错,如何解决?
    • ¥15 电磁场的matlab仿真
    • ¥15 mars2d在vue3中的引入问题
    • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面