今天在客户的客户端实际环境中查核数据时发现一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')
) ;
结果发现:写法一等了十多分钟都不见有结果出来,而写法二一分钟左右就出了结果。
原因应该是子查询先查出一个子结果集然后进行聚合操作,而非子查询的写法应该是边匹配边聚合。