web-dev-qa-db-fra.com

Impact de la performance de l'ajout d'une clé étrangère à une table des rangées de 1 m

J'ai une base de données de commerce électronique exécutant Mariadb + Innodb, qui a une table pour stocker les transactions (T) et une autre qui stocke des guillemets (q).

Je voudrais établir une connexion entre T et Q en ajoutant une clé étrangère sur T référençant Q.

Considérant que q comporte plus de 1 million de rangées (en croissance constante) et t environ 100k, pensez-vous que l'ajout d'une clé étrangère dans le tableau T à Q pourrait causer un impact significatif de performance au cours de l'opération quotidienne? L'alternative serait d'ajouter une colonne INT simple sans une clé étrangère. Ou autre chose, je suis ouvert aux suggestions :)

Pour les détails:

  • Tore environ 20 rangées, principalement des entiers (courts), d'autres clés étrangères et quelques champs DateTime
  • Q comporte 2 champs de raccourcis et quelques champs Varchark (255b chacun).

Merci d'avance pour vos idées.

4
driscan

Vous êtes bien mieux de maintenir une contrainte de clé étrangère (FK) si vos données le méritent.

MySQL créera automatiquement un index - le FK doit faire référence à une clé unique (évidemment, peut être la clé primaire (PK) - de ici ).

Voir ICI Pour une foule de raisons de la raison pour laquelle l'application de contraintes de données dans la base de données est un [~ # ~ # ~] Bonne idée. L'index sur le Table T augmentera la vitesse de recherche au prix d'un petit coup pour les inserts.

Croyez-moi, vous vous sauverrez une immense quantité de chagrin en utilisant les capacités de la base de données plutôt que d'essayer de le faire vous-même.

5
Vérace

Ce n'est pas comme ça que ça marche. Faites-le correctement d'abord, puis optimisez.

Utilisez une clé étrangère si vous avez besoin d'une clé étrangère.

Puis mesurer les performances. Trouvez les points chauds. Optimiser ceux-ci. Si la clé étrangère se trouve être une grande performance, faites-la glisser (douteux), alors retirez-la.

En outre, vous n'avez pas demandé "quel sera l'impact d'avoir des données incorrectes?"

2
Neil McGuigan