Индекс и RLS на Oracle 10g - PullRequest
       3

Индекс и RLS на Oracle 10g

0 голосов
/ 06 октября 2011

У меня есть таблица data1 с 2 полями: user_id и data_id.У меня есть 2 индекса на user_id и data_id.Они не индексируются уникально.

функция:

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

Я регистрирую эту функцию как политику rls для данных1:

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);

Спасибо,

1 Ответ

2 голосов
/ 06 октября 2011

В общем случае было бы бесполезно иметь три индекса для двух столбцов (data_id), (user_id,data_id) и (user_id), поскольку Oracle может использовать составной индекс для запросов, которые фильтруют по user_id, и запросов, которые фильтруют по обоим столбцам.

В вашем случае процедура DBMS_RLS.ADD_POLICY добавит фильтр user_id=XX ко всем запросам на этот объект.Это означает, что вы можете заменить индекс на data_id более эффективным составным индексом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...