我的问题是使用join
和sub-query
方法给出相同结果时的困境,
哪一个更好更快? (纯粹,时间复杂度)
join
会花费O(M+N)
时间复杂度吗?并sub-query
取O(M*N)
?
这样想我错了吗?如果是,请纠正我。
这里,(M,N)是两个表中的行数,它们组合得到了结果。
我正在寻找基于SQL标准而不仅仅是MySQL的答案。
P.S - 我已经完成了this个问题和所有答案。它基本上不关心时间复杂性部分。
答案 0 :(得分:4)
加入是否需要O(M + N)时间复杂度? sub-querytake O(M * N)? 这样想我错了吗?
是的,尊重,你这样想是错的。 SQL是声明性的。您可以使用它来声明您想要的结果,并且服务器根据可用的索引和数据结构找出提供结果的最佳方式 - 以满足您的查询。 / p>
数千年 - 真的! - 开发人员努力研究各种算法,优化和黑客,以降低服务器用于满足查询的过程的复杂性。
随着数千年的经验积累,相关子查询和连接查询之间的性能差异变得不那么重要了。
由于某个特定原因,您的想法是错误的:您正在考虑在程序上,而不是声明性地。当断言可以满足特定类型的查询时,例如,O(m*n)
时间,你正在假设用来满足它的程序。几代开发人员一直致力于使您的假设错误。
当然,可以创建具有病态性能特征的表,索引和查询。它一直在发生。但有人修复了一个索引,问题就解决了。
答案 1 :(得分:-1)
据我所知,表现应该是一样的。在表上应用正确的索引和聚类更为重要。