2012-06-20 4 views
0

다음과 같은 경우 기능적 색인을 만드는 방법.오라클 기능 색인 생성

CREATE INDEX index1 ON table1(MIN(col1));

그것은 오류 아래주고있다 : SQL Error: ORA-00934: group function is not allowed here

Pls는 도움말을!

+1

무엇을하려하십니까? 위에 쓰인 색인은 의미가 없습니다. – Thilo

+2

테이블의 모든 행에 현재 최소값을 캐시 하시겠습니까? – Thilo

답변

3

당신이 (내가 생각으로 당신이) 빨리 col1의 최소 값을 얻을 수있을 싶은 경우에, 당신은 보기 구체화 사용할 수 있습니다

create materialized view table1_mat 
     refresh on commit 
     as 
     select min(col1) min_col1 
     from table1; 

당신은 COL1의 최소 값을 얻기를 다음과 같이 : 최소 값을 선택하는 것은 가속화 할 수있는 반면 그러나

select min_col1 from table1_mat; 

주, table1에 삽입 및 업데이트 시간이 느려질 수 있습니다.를 다시 작성 쿼리

, 그것은 원래 쿼리를 chainging없이 구체화 된 뷰를 사용하는 경우에도 가능 :

alter materiazlied view table1_mat enable query rewrite; 

그런 다음

select min(col1) from table1 

이 구체화 된 뷰를 사용합니다.

+0

감사! 그러나 create 문에서 작은 수정. 'AS'는'... commit' 후에 나옵니다. :) –

+0

@MohamedSaligh :이 점을 지적 해 주셔서 감사합니다. 현재 명세서에서 수정되었습니다. –

6

이 같은 쿼리 속도를합니다 col1에 인덱스를 만들려면 :

SELECT MIN(col1) 
    FROM table1 

는 다음 기능 인덱스가 필요하지 않습니다. 만약 지금 가능 - -

CREATE INDEX index1 ON table1(col1); 

MIN(col1)에 기능 인덱스를 생성 인덱스가 모든 행에 대해 동일한 값 (col1의 가장 작은 값)가 발생할 것이다 : 그냥 같은 일반 인덱스를 만들 수 있습니다. 그러한 색인은 완전히 쓸모가 없다.