2011-01-14 16 views
5

In this O'Reilly presentation gibt es einen Absatz, einige Schlüsselbegriffe für das Verständnis von MySQL Einführung Explain:Nested Loops in MySQL

Was ist ein JOIN?

  • Alles ist ein JOIN, weil MySQL immer verschachtelten Schleifen
  • verwendet
  • Auch ein Single-Table-SELECT oder eine UNION oder eine Unterabfrage

Kann mir jemand erklären, wie dies für einen einzelnen funktioniert Tabelle SELECT?

Antwort

2

Nested Loops ist eine Art der Verarbeitung verbindet:

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 

, die mit Indizes optimiert werden kann einiges, von „für jede Zeile an Schlüssel K in einem gewissen Index gefunden“ statt „jeder Zeile zu tun von Tabelle A ", und das gleiche mit Tabelle B.

Die Präsentation sagt, das ist die einzige Möglichkeit, MySQL-Prozesse beizutreten. Es gibt andere Methoden, die verwendet werden können, aber MySQL implementiert sie nicht. Dieser OraFAQ-Eintrag gibt mehrere, die Oracle implementiert: http://oracle-online-help.blogspot.com/2007/03/nested-loops-hash-join-and-sort-merge.html

"Alles ist ein Join" ist nur ein Implementierungsdetail, glaube ich. Nicht wirklich so wichtig.

+0

Ich fragte nach SINGLE TABLE wählt auf MySQL, so dass Ihre Antwort nicht zutrifft. Sie können denken, dass es "nicht wirklich so wichtig ist", aber ich tue es. Ich würde immer noch gerne * meine * Frage beantwortet. – RADA

+0

@RADA: Ich bin mir nicht sicher, wie genau MySQL einen Single-Table-Select in einen Join umwandelt. Vielleicht verbindet es sich zu einer Dummy-Tabelle mit einer Zeile oder Links-Join zu einer Null-Zeile-Dummy-Tabelle? Ich denke, der MySQL-Quellcode würde sicher sagen. – derobert