我想知道以下两个查询之间的区别
SELECT INVN46, MTER46,CHRE46,CTSQ46, INFR46, INTO46
FROM AULFXAF2.SSP46L01@FXA400HA10G
inner join Invoice_line_in line on line.invoice_line_id = trim(RECT46)|| '+' || trim(INVN46) || '+' || trim(INVL46)
where line.invoice_line_id like 'IN+Q%'
and rownum <=1000
group by INVN46, MTER46,CHRE46,CTSQ46, INFR46, INTO46;
和
select * from
(SELECT INVN46, MTER46,CHRE46,CTSQ46, INFR46, INTO46
FROM AULFXAF2.SSP46L01@FXA400HA10G
inner join Invoice_line_in line on line.invoice_line_id = trim(RECT46)|| '+' || trim(INVN46) || '+' || trim(INVL46)
where line.invoice_line_id like 'IN+Q%'
group by INVN46, MTER46,CHRE46,CTSQ46, INFR46, INTO46)
where rownum <=1000
哪一个准确而快速?根据我的理解,首先获得1000条记录,然后将它们组合在一起。我不确定第二个。
答案 0 :(得分:1)
第一个选择1000个记录然后聚合。
第二个聚合所有数据,然后从结果集中选择1000个记录。
哪个准确?这取决于你想做什么。哪个更快?可能是第一个,因为它在聚合之前过滤数据。
答案 1 :(得分:1)
想象一下,你有一个国家居民的数据库,他们的城镇和年薪。你按城镇分组,然后一起加薪。
第一个查询选择1000个随机居民 - 他们可能都住在一个城镇,或者他们可能来自五个,十个或三十个城镇。然后你按城镇分组并总结他们的工资。一些城镇将不包括在结果集中;而对于那些城镇来说,你可以得到一些&#34;一些&#34; (随机)该镇的居民。在大多数情况下,这种查询是无用的。
第二个查询按城镇分组居民,并计算每个城镇的工资总额。然后外部查询从该国家/地区中选择1000个随机城镇。 (好吧,这是一个非常大的国家,有超过1000个城镇。)这个查询更有帮助 - 虽然您选择1000 随机城镇的事实使它仍然有点无用。
显然,第一个查询应该快得多,因为它只能看1000名居民,而不是1.2亿居民。但这种比较完全无关紧要,因为这两个查询的确非常相似。
。