Quelle est la jointure la plus rapide


12

Lequel est plus vite

SELECT * FROM X INNER JOIN Y ON x.Record_ID = y.ForignKey_NotIndexed_NotUnique

ou

SELECT * FROM X INNER JOIN Y ON y.ForignKey_NotIndexed_NotUnique = x.Record_ID

Réponses:


17

Il n'y aura pas de différence - le moteur de requête dans mssql (et dans la plupart des moteurs de base de données) construira le même plan de requête pour les deux. Vous pouvez le vérifier en affichant le plan de requête estimé et réel dans SQL Workbench.


10

L'optimiseur ignorera cela car il s'agit d'un JOIN identique.

SQL est déclaratif, pas procédural, et la requête sera évaluée dans son intégralité, pas ligne après ligne.


4

Que diriez-vous de créer un test qui utilise vos propres données pour répondre à votre question?

Si vous apprenez seulement une chose sur la programmation de bases de données, c'est qu'il n'y a souvent jamais de solution unique à tout. Il y a bien sûr les meilleures pratiques, mais dans l'ensemble, c'est toujours au cas par cas.

La raison pour laquelle je dis cela est parce qu'avec les requêtes de base de données de relations, il n'y a souvent pas d'approche unique pour tout. Parce qu'il y a un planificateur qui décide comment aller après vos données, la même requête peut être allumée rapidement ou très lentement selon ce que le planificateur choisit de faire avec les informations dont il dispose à un moment donné. Par exemple, un index est parfois votre meilleur ami un mois et un mois plus tard, votre pire ennemi, selon que vous recherchez ou insérez des données et comment les autres utilisent le système pendant que vous exécutez la requête. Je recommande donc toujours de créer un test qui prouve pour votre cas d'utilisation comment cette requête fonctionnera. Et même dans ce cas, vos résultats peuvent varier dans le temps et vous reviendrez à l'optimisation à mesure que les données et l'utilisation changent.

Je pense que les réponses que vous obtiendrez de stackoverflow seront des réponses de manuels, pas la réponse du monde réel que seul votre environnement peut fournir. Et à la fin, c'est votre résultat dans le monde réel qui compte.

Maintenant, votre requête simple que vous montrez ici devrait être la même en termes de performances. Mais même alors, je dis de le tester et de le prouver si vous posez la question. Je ferais confiance aux résultats avant de faire confiance à quiconque, y compris le mien.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.