2009-05-08 13 views

Répondre

0

Dans ce cas, vous devriez voir comment enregistrer les données dans b-tree après que je pense que vous comprendrez l'algorithme JOIN.

2

Il existe différents algorithmes, en fonction du serveur de base de données, les index et l'ordre des données (PK cluster), si les valeurs calculées sont jointes ou non, etc.

Jetez un oeil à un plan de requête, que la plupart des systèmes SQL peuvent créer pour une requête, il devrait vous donner une idée de ce qu'il fait.

+0

un article pour commencer? – henry

+0

Quel moteur DB? – Lucero

+0

de préférence MySql – henry

-2

Il crée un produit cartésien des deux tables, puis en sélectionne les lignes. Lisez le livre de Korth sur les bases de données pour le même.

+4

Je suis assez sûr que ce n'est pas vrai, la production d'un produit cartésien serait très inefficace – codeulike

+0

Je suis assez sûr que c'est ce qui est là dans le livre écrit par Korth. Les bases de données modernes pourraient ne pas le faire. – Geek

+1

Si vous faites une jointure externe complète avec une condition qui ne peut pas être calculée avant d'être jointe, ceci peut être ce qui arrive. Mais pour les jointures internes, cela n'aurait pas beaucoup de sens, car cela donne beaucoup trop d'enregistrements. – Lucero

2

Dans MS Sql, différents algorithmes de jointure seront utilisés dans différentes situations en fonction des tables (leur taille, le type d'index disponible, etc.). J'imagine que d'autres moteurs de DB utilisent également une variété d'algorithmes.

Les principaux types de join utilisés par Mme Sql sont:
- boucles emboîtées rejoint
- Fusion rejoint
- Hash rejoint

Vous pouvez en savoir plus à leur sujet sur cette page: Msdn -Advanced Query Tuning Concepts

Si vous obtenez SQL pour afficher le «plan d'exécution» pour vos requêtes, vous serez en mesure de voir quel type de jointure est utilisé dans différentes situations.

+0

Pouvez-vous jeter la lumière sur ce que les algorithmes? – Geek

+0

Voir le lien msdn dans ma réponse. Cette page est liée à trois autres pages «compréhension ...» qui décrivent l'algorithme de base suivi par SQL dans chaque cas. – codeulike

2

Cela dépend de la base de données que vous utilisez, de ce que vous joignez (grande/petite, séquentielle/aléatoire, indexée/non indexée, etc.). Par exemple, SQL Server a plusieurs algorithmes de jointure différents; les jointures de boucle, les jointures de fusion, les jointures de hachage. Lequel est utilisé est déterminé par l'optimiseur lors de l'élaboration d'un plan d'exécution. Parfois, il fait une erreur de jugement et vous pouvez alors forcer un algorithme de jointure spécifique en utilisant des indicateurs de jointure.

Vous pouvez trouver les pages MSDN suivantes intéressantes:
http://msdn.microsoft.com/en-us/library/ms191318.aspx (boucle)
http://msdn.microsoft.com/en-us/library/ms189313.aspx (dièse)
http://msdn.microsoft.com/en-us/library/ms190967.aspx (fusion)
http://msdn.microsoft.com/en-us/library/ms173815.aspx (conseils)

0

Toutes la théorie des ensembles en fonction, depuis un certain temps . Essayez de ne pas lier un trop grand nombre de tables à la fois, cela semble indiquer des ressources de base de données avec toute la numérisation. Les indices aident à la performance, regardent quelques sites SQL et recherchent l'optimisation des requêtes sql pour avoir un aperçu. SQL Management Studio possède un utilitaire de plan d'exécution intégré souvent intéressant, en particulier pour les requêtes complexes de grande taille.

0

L'optimiseur choisira (ou devrait) choisir l'algo de jointure la plus rapide.

Cependant, il existe deux types différents de déterminer ce qui est rapide:

  1. Vous mesurez le temps qu'il faut pour revenir toutes les lignes jointes.
  2. Vous mesurez le temps nécessaire pour renvoyer les premières lignes jointes.

Si vous souhaitez renvoyer toutes les lignes le plus rapidement possible, l'optimiseur choisira souvent une jointure de hachage ou une jointure de fusion. Si vous souhaitez renvoyer les premières lignes le plus rapidement possible, l'optimiseur choisira une jointure de boucles imbriquées.