如何为此查询创建位图索引

时间:2015-01-22 11:11:03

标签: database oracle oracle11g indexing

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

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' N'和240000' Y'。 应该是位图索引的代码,还有其他方法来优化此查询吗?

1 个答案:

答案 0 :(得分:1)

一定是这个:

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

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