Oracle Reference Partition - Как убедиться, что я получаю преимущества при выборе - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь убедиться, что получаю преимущество выбора из раздела при использовании ссылочных разделов.

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

У меня вопрос: когда я выбираю из таблицы, разделенной по ссылкам, нужно ли мне просто включать столбец, для которого определяется ссылочный внешний ключ? Или мне нужно присоединиться и включить столбец родительской таблицы, для которого фактически определен раздел?

create table alpha (
    name varchar2(240) not null,
    partition_no number(14) not null,
    constraint alpha_pk
        primary key (name),
    constraint alpha_c01
        check (partition_no > 0)
)
    partition by range(partition_no)
    interval (1)
    (partition empty values less than (1))
;

create table beta (
    name varchar2(240) not null,
    alpha_name varchar2(240) not null,
    some_data number not null,
    constraint beta_pk
        primary key (name),
    constraint beta_f01
        foreign key (alpha_name)
        references alpha (name)
)
    partition by reference (beta_f01)
;

Предположим, что в рабочих таблицах будет гораздо больше данных, с сотнями миллионов строк в бета-таблице, но всего лишь тысячи на раздел.

Это все, что мне нужно?

select b.some_data
    from beta b
    where b.alpha_name = 'Blah'
;

Спасибо, если кто-нибудь может проверить это для меня. Или могу объяснить что-то еще, что мне не хватает в отношении правильного создания индексов в ссылочно-секционированных таблицах.

[Edit] Удалена часть примера, где не должно быть предложения. Этот пример предназначен для представления чтения разделенного на ссылки только внешним ключом раздела ссылки в предложении where.

...