RAD*_*ADA 6 mysql sql-execution-plan
在这篇O'Reilly演示文稿中,有一段介绍了理解MySQL的EXPLAIN的一些关键概念:
什么是加入?
- 一切都是JOIN,因为MySQL总是使用嵌套循环
- 甚至是单表SELECT或UNION或子查询
任何人都可以解释这对单表SELECT如何工作?
嵌套循环是处理连接的一种方法:
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
Run Code Online (Sandbox Code Playgroud)
这可以通过索引进行相当多的优化,通过执行“针对某个索引中键 K 处找到的每一行”而不是“表 A 的每一行”,对于表 B 也是如此。
演示文稿说这是 MySQL 处理连接的唯一方式。还有其他方法可以使用,但 MySQL 没有实现它们。此 OraFAQ 条目提供了 Oracle 实现的几个:http://www.orafaq.com/tuningguide/join%20methods.html类似:http://oracle-online-help.blogspot.com/2007/03/nested-loops-哈希连接和排序合并.html
我相信,“一切都是连接”只是一个实现细节。其实没那么重要。