为什么 DB 子查询比表连接效率低

像下面的 SQL 语句中,把内层查询结果当作外层查询的比较条件的语句就是子查询,也叫嵌套查询。

select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);

子查询的效率和表连接操作相比,子查询要慢很多,原因是子查询的每一层嵌套都会创建一个临时表,外层查询会用到这个临时表,使用完毕后会销毁这个临时表。而表的连接操作是不需要创建临时表的,所以临时表的创建和销毁所带来的性能开销导致了子查询操作要比连接操作慢。
关于 SQL 的内部实现原理,等后续我会继续深入研究,理解其内部的数学原理。