Я пытаюсь убедиться, что получаю преимущество выбора из раздела при использовании ссылочных разделов.
В обычных разделах я знаю, что вы должны включить столбец (столбцы), для которого определен раздел, чтобы 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.