Вложенные циклы является одним из способов обработки присоединяется:
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
«Все это соединение» - это всего лишь деталь реализации, я считаю. Не очень важно.
Я спросил о выборе SINGLE TABLE в MySQL, поэтому ваш ответ не применяется. Вы можете подумать, что это «не очень важно», но я знаю. Мне все еще хотелось бы ответить на мой вопрос. – RADA
@ RADA: Я точно не знаю, как MySQL преобразует одностолбцовое выделение в соединение. Может быть, он присоединяется к фиктивной таблице с одной строкой или левым соединением в таблицу фиктивных нуль-строк? Я предполагаю, что исходный код MySQL скажет наверняка. – derobert