今天在客户的客户端实际环境中查核数据时发现一SQL优化方法:
表a 中有上百万条记录,且不断有新记录插入。
现在要汇总此表中小于某个时间的记录条数,SQL两种写法如下:
写法一:
select count(*)
from a
where date < to_date('20100101','YYYYMMDD') ;
写法二:
select count(*)
from ( select *
from a
where date < to_date('20100101','YYYYMMDD')
);
结果发现:写法一等了十多分钟都不见有结果出来,而写法二一分钟左右就出了结果。
原因应该是子查询先查出一个子结果集然后进行聚合操作,而非子查询的写法应该是边匹配边聚合。
在大量数据环境中,通过对比两种SQL写法发现,使用子查询再聚合的方式比直接聚合更高效。前者能在一分钟内返回结果,而后者则需要十多分钟。

被折叠的 条评论
为什么被折叠?



