首先,分组和排序都是十分消耗资源的,最好的解决办法就是不做这个操作:)提高效率可以尝试下: 1.如可能,事先在group by 后的字段加上组合索引. 2.调整参数pga_aggregate_target的值.
对特殊会话采用手动PGA管理 这个方法就是将某个会话的PGA改为手动管理,再设置会话的sort_area_size和hash_area_size,然后再执行SQL,如下所示: alter session set workarea_size_policy=MANUAL; --50M alter session set sort_area_size=52428800; --200M alter session set hash_area_size=209715200; --执行处理你的SQL.处理完后,根据需要将会话改为自动PGA管理 alter session set workarea_size_policy=AUTO;
1.如可能,事先在group by 后的字段加上组合索引.
2.调整参数pga_aggregate_target的值.
这个方法就是将某个会话的PGA改为手动管理,再设置会话的sort_area_size和hash_area_size,然后再执行SQL,如下所示:
alter session set workarea_size_policy=MANUAL;
--50M
alter session set sort_area_size=52428800;
--200M
alter session set hash_area_size=209715200;
--执行处理你的SQL.处理完后,根据需要将会话改为自动PGA管理
alter session set workarea_size_policy=AUTO;
“调整参数pga_aggregate_target的值.”这个是起什么作用的呢? 如果调整该如何去调?
只有先加入查询条件,减少GROUPBY的数据量才会快
还有最好用UNION ALL