2011-01-14 4 views
5

En this O'Reilly presentation, il y a un paragraphe introduisant des concepts clés pour la compréhension MySQL Expliquons:boucles emboîtées dans MySQL

Qu'est-ce qu'un JOIN?

  • Tout est JOIN, parce que MySQL utilise toujours boucles imbriquées
  • Même une seule table SELECT ou un syndicat ou d'une sous-requête

Quelqu'un peut-il expliquer comment cela fonctionne pour une seule table SELECT?

Répondre

2

boucles imbriquées est une façon de traitement rejoint:

for each row of table A 
    if this row matches where clauses 
    for each row of joined table B 
     if this row matches where clauses and join clauses 
     accept row 
     end 
    end 
    end 
end 

qui peut être optimisé avec des indices un peu, en faisant « pour chaque ligne trouvée à clé K dans un indice » au lieu de « chaque rangée de table A ", et la même chose avec la table B.

La présentation indique que c'est la seule façon dont les processus MySQL se joint. Il existe d'autres méthodes que celles qui peuvent être utilisées, mais MySQL ne les implémente pas. Cette entrée OraFAQ donne plusieurs que Oracle implémente: http://www.orafaq.com/tuningguide/join%20methods.html De même: http://oracle-online-help.blogspot.com/2007/03/nested-loops-hash-join-and-sort-merge.html

"Tout est une jointure" est juste un détail d'implémentation, je crois. Pas vraiment important.

+0

J'ai demandé des sélections SINGLE TABLE sur MySQL afin que votre réponse ne s'applique pas. Vous pouvez penser que ce n'est pas vraiment important, mais je le fais. Je voudrais toujours que * ma * question soit répondue. – RADA

+0

@RADA: Je ne sais pas exactement comment MySQL convertit une sélection de table unique en une jointure. Peut-être le joint-il à une table fictive avec une rangée, ou à gauche-joint à une table fictive de zéro-rangée? Je suppose que le code source MySQL dirait à coup sûr. – derobert