【发布时间】:2018-02-08 12:58:46
【问题描述】:
我的问题是关于使用join 和sub-query 方法给出相同结果时的困境,
哪个更好更快? (纯粹就时间复杂度而言)
join 是否采用 O(M+N) 时间复杂度? sub-query接受O(M*N)吗?
我这样想错了吗?如果是,请纠正我。
这里,(M, N) 是两个表中的行数,组合得到的结果。
我正在寻找基于 SQL 标准的答案,而不仅仅是 MySQL。
P.S - 我已经完成了this 问题及其所有答案。它本质上并不关心时间复杂度部分。
【问题讨论】:
-
MySQL(和其他 RDMS)中的查询计划模块非常复杂,以至于对这个问题唯一可以想到的答案是“视情况而定”。规划器可以将一些查询从子查询形式转换为连接形式。别人不能。索引和表基数都会影响查询计划者的决策。
-
关于 O(M+N) 和 O(M*N) 部分的任何提示? @O.Jones
-
一般来说连接性能更好..但正如 O.Jones 所建议的那样..“取决于”
-
在大多数现代数据库中,查询优化器足够聪明,可以在任何一种情况下创建最佳执行计划。有时,如果可能,子查询将与连接一样执行。
-
关于 O(M+N) 和 O(M*N) 部分的任何提示? (时间复杂度 w.r.t 行数)。我在一篇文章中读到,编译器可以在连接中使用散列技术,而在子查询中则不然。 @scaisEdge
标签: mysql sql sql-server join subquery