2011-01-14 50 views
0

这是汤姆的一个问题,但他现在很忙。在Oracle中使用功能索引

我不是一个DBA,只需一个简单的Java EE开发人员,也我是新来甲骨文,我被要求优化一些查询。

我有一个大表,这样

create table test_table(
    DUMMY VARCHAR2(50), 
    COB DATE, 
    DATA VARCHAR2(100) 
); 

真正的表有更多的列,结构角落找寻COB日期。为了处理这个表,我使用了一个视图

create or replace force view test_view("DUMMY", "COB", "DATA") 
AS 
    SELECT 
     DUMMY, 
     COB, 
     DATA 
    FROM test_table 
    WHERE 
     DUMMY IS NULL 
     OR DUMMY <> 'INTFR'; 

我主要通过COB日期查询这个视图。

SELECT * from TEST_VIEW where COB = '15-Dec-2010' 

我想为查询优化特定的功能性指标,它看起来像这样

CREATE INDEX "TEST_TABLE_DUMMY_COB_IDX" ON "TEST_TABLE" (
    case 
    when DUMMY IS NULL then COB 
    when DUMMY <> 'INTFR' then COB 
    end 
); 

据我了解,这样我就会有一天所有recrds在B *树索引表,用COB的关键字,这将优化我的一般查询使用,还是我需要更多的魔法来使它工作?

回答

1

因为你拥有它,因为在索引定义的表达式的视图的WHERE子句中不使用它不会工作。这将工作:

create index test_table_dummy_cob_idx on test_table 
(case when dummy is null or dummy != 'INTFR' then cob end); 

create or replace view test_view as 
select dummy, 
     cob, 
     data 
from test_table 
where case when dummy is null or dummy != 'INTFR' then cob end = cob; 

这是否会实际上使您的查询更有效取决于数据:您将需要比较以查看。

+0

只有一个办法,找出:) 感谢。 – mavarazy 2011-01-14 15:11:50