2011-01-14 14 views
5

W this O'Reilly presentation, istnieje paragraf wprowadzenie pewnych kluczowych pojęć dla zrozumienia MySQL wyjaśnić:zagnieżdżone pętle w MySQL

Czym jest dołączyć?

  • Wszystko JOIN, ponieważ MySQL zawsze wykorzystuje zagnieżdżone pętle
  • Nawet pojedynczej tabeli SELECT lub Unii lub podzapytanie

Może ktoś wyjaśnić, jak to działa na pojedynczym tabela WYBIERZ?

Odpowiedz

2

zagnieżdżonych pętli jest jednym ze sposobów przetwarzania dołącza:

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 

To może być zoptymalizowane z indeksami trochę, wykonując „dla każdego rzędu znalezionego na klucz K w pewnym indeksem” zamiast „każdego wiersza tabela A ", i to samo z tabelą B.

Prezentacja mówi, że jest to jedyny sposób łączenia się procesów MySQL. Istnieją inne metody, niż można zastosować, ale MySQL ich nie implementuje. Ten wpis OraFAQ zawiera kilka przykładów implementacji Oracle: http://www.orafaq.com/tuningguide/join%20methods.html Podobnie: http://oracle-online-help.blogspot.com/2007/03/nested-loops-hash-join-and-sort-merge.html

"Wszystko jest złączeniem" to tylko szczegół wdrożenia, jak sądzę. Niezupełnie tak ważne.

+0

Zapytałem o POJEDYNCZY TABELĘ w MySQL, więc odpowiedź nie ma zastosowania. Możesz myśleć, że to "nie jest aż tak ważne", ale robię to. Nadal chciałbym odpowiedzieć na * moje * pytanie. – RADA

+0

@RADA: Nie jestem pewien, w jaki sposób MySQL konwertuje wybór z jednego stołu do łączenia. Może dołącza do niego do atrapowego stołu z jednym rzędem, lub do lewostronnego stolika? Domyślam się, że kod źródłowy MySQL powiedziałby na pewno. – derobert