2011-01-14 3 views
5

В this O'Reilly presentation, есть пункт введения некоторых ключевых понятий для понимания MySQL объясним:Вложенные циклы в MySQL

Что является JOIN?

  • Всего это объединение, потому что MySQL всегда использует вложенные циклы
  • Даже один стол ВЫБРАТЬ или UNION или подзапросы

Может кто-нибудь объяснить, как это работает для одного таблица SELECT?

ответ

2

Вложенные циклы является одним из способов обработки присоединяется:

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 

Это может быть оптимизировано с индексами совсем немного, делая «для каждой строки, найденной на ключе К в некотором индексе» вместо «каждой строки таблица A ", а также таблица B.

В презентации говорится, что это единственный способ соединения процессов MySQL. Существуют и другие методы, которые могут быть использованы, но MySQL их не реализует. Эта запись OraFAQ дает несколько данных, которые Oracle реализует: http://www.orafaq.com/tuningguide/join%20methods.html Аналогичным образом: http://oracle-online-help.blogspot.com/2007/03/nested-loops-hash-join-and-sort-merge.html

«Все это соединение» - это всего лишь деталь реализации, я считаю. Не очень важно.

+0

Я спросил о выборе SINGLE TABLE в MySQL, поэтому ваш ответ не применяется. Вы можете подумать, что это «не очень важно», но я знаю. Мне все еще хотелось бы ответить на мой вопрос. – RADA

+0

@ RADA: Я точно не знаю, как MySQL преобразует одностолбцовое выделение в соединение. Может быть, он присоединяется к фиктивной таблице с одной строкой или левым соединением в таблицу фиктивных нуль-строк? Я предполагаю, что исходный код MySQL скажет наверняка. – derobert

Смежные вопросы