Рассмотрим следующую (упрощенную) ситуацию:
CREATE TABLE PARENT (
PARENT_ID INT PRIMARY KEY
);
CREATE TABLE CHILD (
CHILD_ID INT PRIMARY KEY,
PARENT_ID INT NOT NULL,
FOREIGN KEY (PARENT_ID) REFERENCES PARENT (PARENT_ID)
);
Нет индекса для CHILD).PARENT_ID
, поэтому изменение / удаление PARENT
обходится дорого (Oracle необходимо выполнить полное сканирование таблицы на CHILD
, чтобы обеспечить ссылочную целостность). Тем не менее, план выполнения следующего оператора ...
DELETE FROM PARENT WHERE PARENT_ID = 1
... не показывает сканирование таблицы (SYS_C0070229 - это индекс на PARENT.PARENT_ID
):
Я знаю, что есть способы видеть все неиндексированные ИНОСТРАННЫЕ КЛЮЧИ , но было бы еще лучше, если бы я мог быть «предупрежден» о потенциальной проблеме в самом плане выполнения запроса (кстати, это делают MS SQL Server и, возможно, другие базы данных).
Возможно ли такое в Oracle?
Я использую Oracle 10.2, если это важно.