Accélérer les jointures internes entre une grande table et une petite table
Cela peut être une question stupide, mais il peut jeter une certaine lumière sur la façon dont les jointures de travail à l'interne.
Disons que j'ai une grande table L
et une petite table S
(100K lignes vs 100 lignes).
Y aurait-il une différence en termes de vitesse entre les deux options suivantes?:
OPTION 1: OPTION 2:
--------- ---------
SELECT * SELECT *
FROM L INNER JOIN S FROM S INNER JOIN L
ON L.id = S.id; ON L.id = S.id;
Avis que la seule différence est l'ordre dans lequel les tables sont jointes.
Je me rends compte de la performance peut varier entre les différentes SQL langues. Si oui, comment MySQL comparer à l'Accès?
Vous devez vous connecter pour publier un commentaire.
Non, l'ordre n'a pas d'importance.
Presque tous du SGBDR (par exemple MS Access, MySQL, SQL Server, ORACLE, etc) utiliser un coût en fonction de l'optimiseur basé sur les statistiques de colonne. Dans la plupart des situations, l'optimiseur va choisir un bon plan. Dans l'exemple que vous avez donné, l'ordre n'a pas d'importance (à condition que les statistiques sont à jour).
Ref.
Pourrait être d'intérêt: ACC: Comment faire pour Optimiser les Requêtes dans Microsoft Access 2.0, Microsoft Access 95 et Microsoft Access 97
Tony Toews est Microsoft Access Performance FAQ vaut la peine de lire.
Je sais que Oracle n'est pas sur votre liste, mais je pense que la plupart des bases de données modernes se comportent de cette façon.
Vous pouvez le voir dans le plan d'exécution suivant, qu'il n'y a pas de différence entre les deux états.
C'est un accès complet à chacune des deux tables (pas d'index dans mon cas), et puis un
HASH JOIN
. Puisque vous voulez tout de deux tables, deux tables doivent être lues et a rejoint, la séquence n'a pas d'impact.