SQL查询时间复杂度-连接与子查询

pro*_*ats 1 mysql sql sql-server join subquery

我的问题是关于在使用joinsub-query方法产生相同结果时的困境,

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

是否join采取O(M+N)时间复杂度?和sub-query需要O(M*N)吗?

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

这里,(M,N)是两个表中的行数,将其组合以获得结果。

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

附言:我已经解决了这个问题及其所有答案。它本质上不关心时间复杂度部分。

O. *_*nes 5

加入是否需要O(M + N)时间复杂度?子查询是否采用O(M * N)?我这样想是不是错了?

是的,尊重,你这样想是错误的。SQL是声明性的。您可以使用它来声明所需的结果,然后服务器会根据可用的索引和数据结构,找出提供该结果的最佳方法(以满足您的查询)。

数千年-真的!-开发人员的努力已经投入了各种算法,优化和技巧,以降低服务器用来满足查询的过程的复杂性。

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

由于特定原因,您的想法是错误的:您在程序上而不是声明式地思考当您断言某个特定类型的查询可以在例如O(m*n)一段时间内得到满足时,您就在假设用于满足该条件的过程方面进行了假设。几代开发人员一直致力于使您的假设错误。

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