Ответ 1
Да, наличие ограничений внешнего ключа может улучшить производительность запросов. Существуют различные преобразования, которые открыты для оптимизатора, когда существуют соответствующие ограничения внешнего ключа, которые обычно недоступны. Например, если вы должны присоединиться к A
и B
, а только выбрать данные из B
, оптимизатор может полностью исключить A
из плана запроса, если на нем есть ограничение внешнего ключа (такого рода вещи очень удобен, когда у вас есть полезные представления, которые присоединяются к большему количеству таблиц, чем требуется для текущего запроса, потому что вам не нужно торговать расходами на добавление дополнительных объединений против повторного использования кода с использованием существующего представления). Они также пригодится, когда вы делаете такие вещи, как использование таких вещей, как переписывание запросов, чтобы переписать запрос для использования материализованного представления в системе хранилища данных /DSS.
В Tom Kyte есть презентация Вопросы метаданных, в которой говорится о том, как различные типы ограничений вместе с другими метаданными могут влиять на оптимизатор.