请问  oralce中
有三个表a、b,c  每个表记录都很多
我现在需要把三个表中的记录分别多字段group by
之后 union,合成一个视图现在发现这样执行语句 用时2分钟,太慢了
请教怎样改进语句?

解决方案 »

  1.   

    首先,分组和排序都是十分消耗资源的,最好的解决办法就是不做这个操作:)提高效率可以尝试下:
    1.如可能,事先在group by 后的字段加上组合索引.
    2.调整参数pga_aggregate_target的值.
      

  2.   

    对特殊会话采用手动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; 
      

  3.   

    我先试试组合索引
    “调整参数pga_aggregate_target的值.”这个是起什么作用的呢? 如果调整该如何去调?
      

  4.   

    在sql语句结构上 有没有提高效率的方法呢?
      

  5.   

    不把你的sql贴出来没人能优化,呵呵,但优化可能还不如加索引有效!呵呵!
      

  6.   

    如果你这个视图不建查询条件,那应该很难很难优化,
    只有先加入查询条件,减少GROUPBY的数据量才会快
    还有最好用UNION ALL