Oui, la mise en place de contraintes de clé étrangère peut améliorer les performances des requêtes. Il existe diverses transformations ouvertes à l'optimiseur lorsqu'il existe des contraintes de clé étrangère appropriées qui ne sont généralement pas disponibles. Par exemple, si vous deviez rejoindre A
et B
mais sélectionnez uniquement les données de B
, l'optimiseur pourrait éliminer A
du plan de requête entièrement s'il y avait une contrainte de clé étrangère en place (ce genre de chose est très pratique lorsque vous avez des vues utiles qui se joignent à plus de tables que votre requête actuelle n'en a strictement besoin car vous n'avez pas à échanger le les coûts de performance des jointures supplémentaires par rapport à la réutilisation du code à partir d'une vue existante). Ils sont également utiles lorsque vous utilisez des éléments tels que la réécriture de requête pour réécrire une requête afin d'utiliser une vue matérialisée dans un entrepôt de données/système de type DSS.
Tom Kyte a une présentation Metadata Matters qui explique comment divers types de contraintes, ainsi que d'autres éléments de métadonnées, peuvent influencer l'optimiseur.