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