Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

L'utilisation de clés étrangères dans SQL Server nuit-elle gravement aux performances ?

Il y a un petit impact sur les performances des insertions, des mises à jour et des suppressions car le FK doit être vérifié. Pour un enregistrement individuel, cela serait normalement si léger qu'il ne serait pas perceptible à moins que vous ne commenciez à avoir un nombre ridicule de FK associés à la table (il est clair qu'il faut plus de temps pour vérifier 100 autres tables que 2). C'est une bonne chose et non une mauvaise chose car les bases de données sans intégrité ne sont pas fiables et donc inutiles. Vous ne devriez pas échanger l'intégrité contre la vitesse. Cet impact sur les performances est généralement compensé par une meilleure capacité à optimiser les plans d'exécution.

Nous avons une base de données de taille moyenne avec environ 9 millions d'enregistrements et FK partout où ils devraient être et nous remarquons rarement un impact sur les performances (sauf sur une table mal conçue qui contient bien plus de 100 clés étrangères, il est un peu lent de supprimer des enregistrements de cela comme tout doit être vérifié). Presque tous les dba que je connais qui traitent de grandes bases de données de téraoctets et un véritable besoin de hautes performances sur de grands ensembles de données insistent sur les contraintes de clé étrangère car l'intégrité est la clé de toute base de données. Si les personnes disposant de bases de données de la taille d'un téraoctet peuvent se permettre un très faible impact sur les performances, vous le pouvez aussi.

Les FK ne sont pas automatiquement indexés et s'ils ne le sont pas, cela peut entraîner des problèmes de performances.

Honnêtement, je prendrais une copie de votre base de données, ajouterais des FK correctement indexés et montrerais le décalage horaire pour insérer, supprimer, mettre à jour et sélectionner parmi ces tables en comparaison avec la même chose dans votre base de données sans les FK. Montrez que vous n'affecterez pas les performances. Affichez ensuite les résultats des requêtes qui affichent des enregistrements orphelins qui n'ont plus de sens car la PK à laquelle ils sont associés n'existe plus. Il est particulièrement efficace de le montrer pour les tableaux contenant des informations financières ("Nous avons 2700 commandes que nous ne pouvons pas associer à un client" obligera la direction à s'asseoir et à en prendre note).