SQL查询时间复杂度 - 加入与子查询

时间:2017-08-30 17:44:28

标签: mysql sql sql-server join subquery

我的问题是使用joinsub-query方法给出相同结果时的困境,

哪一个更好更快? 纯粹时间复杂度

join会花费O(M+N)时间复杂度吗?并sub-queryO(M*N)

这样想我错了吗?如果是,请纠正我。

这里,(M,N)是两个表中的行数,它们组合得到了结果。

我正在寻找基于SQL标准而不仅仅是MySQL的答案。

P.S - 我已经完成了this个问题和所有答案。它基本上不关心时间复杂性部分。

2 个答案:

答案 0 :(得分:4)

  

加入是否需要O(M + N)时间复杂度? sub-querytake O(M * N)?   这样想我错了吗?

是的,尊重,你这样想是错的。 SQL是声明性的。您可以使用它来声明您想要的结果,并且服务器根据可用的索引和数据结构找出提供结果的最佳方式 - 以满足您的查询。 / p>

数千年 - 真的! - 开发人员努力研究各种算法,优化和黑客,以降低服务器用于满足查询的过程的复杂性。

随着数千年的经验积累,相关子查询和连接查询之间的性能差异变得不那么重要了。

由于某个特定原因,您的想法是错误的:您正在考虑在程序上,而不是声明性地。当断言可以满足特定类型的查询时,例如,O(m*n)时间,你正在假设用来满足它的程序。几代开发人员一直致力于使您的假设错误。

当然,可以创建具有病态性能特征的表,索引和查询。它一直在发生。但有人修复了一个索引,问题就解决了。

答案 1 :(得分:-1)

据我所知,表现应该是一样的。在表上应用正确的索引和聚类更为重要。