2011-10-06 3 views
0

user_id 및 data_id 필드가 두 개인 table data1 있습니다. 나는 user_id와 data_id에 2 개의 인덱스를 가지고있다. 그것들은 고유하지 않은 색인입니다.색인 및 RLS on Oracle 10g

기능 :

FUNCTION user_filter(p_schema IN VARCHAR2, 
            p_object IN VARCHAR2) RETURN VARCHAR2 IS 
    BEGIN 
    RETURN 'user_id='||session_pkg.user_id; 
    END; 

내가 DATA1에 RLS 정책으로이 기능 등록 :

DBMS_RLS.ADD_POLICY(OBJECT_SCHEMA => '', 
         OBJECT_NAME  => 'data1', 
         POLICY_NAME  => 'user_filter', 
         POLICY_FUNCTION => 'user_filter'); 

최고의 성능을하기를, 나는 다음과 같이 1 개보다 인덱스를 생성해야합니까?

create index data3_idx on data (user_ID, data_id); 

감사합니다, 일반적으로

+0

02 인덱스가 필요하다는 것을 의미합니까 : on (user_id, data_id) 및 data_id? 언젠가 우리는 RLS를 제거 할 것입니다! – QuangND

답변

2

는 오라클이 모두 user_id에 해당 필터 쿼리와 쿼리 필터를위한 복합 인덱스를 사용할 수 있기 때문에 두 개의 열 (data_id), (user_id,data_id)(user_id) 세 인덱스가 낭비입니다 열.

DBMS_RLS.ADD_POLICY 절차에서는이 개체의 모든 요청에 ​​user_id=XX 필터를 추가합니다. 즉, data_id의 색인을보다 효율적인 복합 색인으로 바꿀 수 있습니다.

+0

안녕 빈센트 말그라 트, 몇 번, 나는 RLS를 제거합니다. 나는 (user_id, data_id)와 (data_id)의 2 개의 인덱스를 유지할 것인가? – QuangND

+0

네, 일부 쿼리가 RLS를 사용하지 않고'data_id '로 데이터를 쿼리해야하는 경우이 두 인덱스가 잘되어야합니다. –

관련 문제