Nested vòng là một cách để chế biến tham gia:
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
Điều đó có thể được tối ưu hóa với chỉ số khá một chút, bằng cách làm "cho mỗi hàng tìm thấy tại chìa khóa K ở một số chỉ số" thay vì "mỗi dãy bảng A ", và giống với bảng B.
Trình bày đang nói đây là cách duy nhất để MySQL xử lý các phép nối. Có những phương pháp khác hơn có thể được sử dụng, nhưng MySQL không thực hiện chúng. Mục nhập OraFAQ này cung cấp một số thông tin mà Oracle thực hiện: http://www.orafaq.com/tuningguide/join%20methods.html Tương tự: http://oracle-online-help.blogspot.com/2007/03/nested-loops-hash-join-and-sort-merge.html
"Mọi thứ đều tham gia" chỉ là chi tiết triển khai, tôi tin. Không thực sự quan trọng.
Tôi đã hỏi về SINGLE TABLE chọn trên MySQL để câu trả lời của bạn không áp dụng. Bạn có thể nghĩ rằng đó là "không thực sự quan trọng" nhưng tôi làm. Tôi vẫn muốn câu trả lời * của tôi * trả lời. – RADA
@RADA: Tôi không chắc chính xác cách MySQL chuyển đổi một bảng chọn thành một tham gia. Có lẽ nó tham gia nó vào một bảng giả với một hàng, hoặc trái tham gia vào một bảng giả hàng không? Tôi đoán mã nguồn MySQL sẽ nói chắc chắn. – derobert