我的问题是当使用join
和sub-query
方法给出相同的结果时,
哪个更好,哪个更快?(__纯从时间复杂度__的角度来看)
join
需要O(M+N)
时间复杂度吗?sub-query
是否接受O(M*N)
?
我这样想错了吗?如果是,请纠正我。
这里,(M,N)是两个表中的行数,结合这些行可以得到结果。
我正在寻找基于SQL标准的答案,而不仅仅是MySQL。
P.S -我已经看过了this的问题和所有的答案。从本质上讲,它并不关注时间复杂性部分。
发布于 2017-08-30 10:06:01
联接是否需要O(M+N)时间复杂度?子查询取O(M*N)吗?我这样想错了吗?
是的,恕我直言,你这样想是错误的。SQL是声明性的。您可以使用它来声明您想要的结果,服务器根据可用的索引和数据结构找出传递结果的最佳方法--满足您的查询。
几千年来--真的!--开发人员已经开始研究各种算法、优化和黑客,以降低服务器用于满足查询的过程的复杂性。
随着数千年的经验积累,相关子查询和连接查询之间的性能差异变得不那么重要了。
你的想法是错误的,有一个特定的原因:你是按程序思考,而不是陈述性的思考。当您断言某一特定类型的查询可以在例如O(m*n)
时间内满足时,您是在假设用于满足它的过程。几代开发人员一直致力于使您的假设错误。
当然,可以创建具有病态性能特征的表、索引和查询。这种事时时刻刻都发生。但是有人修正了一个指数,问题就解决了。
发布于 2017-08-30 09:51:51
据我所知,演出应该是一样的。在表上应用正确的索引和集群更为重要。
https://stackoverflow.com/questions/45966729
复制