我很难搞清楚什么是最好的,或者是否有差异, 但是我没有找到任何材料来帮助我理解这一点, 所以我会问这个问题,如果不适合我,那么对于那些可能最终处于同样情况的人来说。
在联接之前或之后聚合子查询,在我的特定情况下,由于数据碎片和规范化程序错误,子查询相当慢,
我得到了一个高度复杂的主查询和一个子查询,该查询是使用union组合的3个小查询构建的(将删除重复记录) 我只需要来自这个子查询的单个值(对于每一行),所以在某些时候我将最终总结这个值,(同时将必要的控制数据分组,以便我可以加入)
会产生什么影响?
记住每条线都会有数千条记录相加, 并且数据不是本机的,而是构建的,因此可能驻留在内存中, (这只是从查询优化器的角度猜测)
答案 0 :(得分:2)
通常我将group-by保留在子查询中(在Oracle术语中称为“内联视图”)。 这样查询就更加简单明了。 另外我相信执行计划更有效率,因为要聚合的数据集更小,并且结果集的连接键也更小。
但这不是一个明确的答案。如果要加入内联视图的行源几乎没有匹配的行,您可能会发现早期联接会减少聚合工作。
正确的答案是:对特定数据集的查询进行基准测试。
答案 1 :(得分:1)
我认为以这样一般的方式没有正确或错误的方法来做到这一点。来自您所描述的查询的性能取决于许多不同的因素:
对于您的情况,我只是建议基准测试。如果这看起来不是一个令人满意的答案,我很抱歉,但这是许多表演问题的方法......
因此,使用您的方法和一些测试数据设置一个简单的测试,然后选择更快的任何东西。