【问题标题】:How to create bitmap index for this query如何为此查询创建位图索引
【发布时间】:2015-03-21 03:48:34
【问题描述】:

我正在尝试为此查询创建位图索引:

SELECT "TAB2"."TAB2ID","TAB1"."TAB1ID"
FROM "TAB1","TAB2"
WHERE ((("TAB1"."YESNO" = 'Y' ) 
AND ("TAB2"."LOCID" = "TAB1"."LOCID" ) ) 
AND ("TAB2"."YESNO" = 'Y' ) ) 
ORDER BY "TAB1"."LOCNO";

我尝试了多个位图索引,但它们似乎都没有被使用,即使我尝试给查询一个使用位图索引的提示。即使只是 tab2 上的索引似乎也没有任何作用。

这是我尝试过的一个,但没有任何效果,即使在收集了索引和表统计信息之后:

CREATE BITMAP INDEX TAB2_TAB1_BIT_IDX 
ON TAB2(TAB2.YESNO,TAB1.YESNO)
FROM    TAB1        ,       TAB2 
WHERE   TAB2.LOCID = TAB1.LOCID  

Tab1 包含 2 N 和 29 Y,Tab2 包含 30000 'N' 和 240000 'Y'。 位图索引的代码应该是什么,还有其他方法可以优化这个查询吗?

【问题讨论】:

    标签: database oracle oracle11g indexing


    【解决方案1】:

    一定是这个:

    CREATE BITMAP INDEX TAB1_BIT_IDX  ON TAB1 (YESNO);
    CREATE BITMAP INDEX TAB2_BIT_IDX  ON TAB2 (YESNO);
    

    一般说明:通常一个表上的单个位图索引没有太大帮助。当您定义多个位图索引时,您将获得位图索引的巨大收益。 单个位图索引的选择性低,但几个索引的组合应该是有选择性的。在这种情况下,您可以正确使用位图索引!

    【讨论】:

    • 根据dba-oracle.com/art_builder_bitmap_join_idx.htm 和其他来源,它应该可以在连接上。 o=只放置多个位索引比使用查询的特定连接更有效吗?
    • 是的,我明白了。我从来没有使用过位图连接索引——我什至不知道它们的存在。
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多