数据比较多
当用select * from patriot_comments查询只要0.063秒,
但用select * from patriot_comments order by floor desc要53.063秒,
只用了一个排序就多用了很多时间,
诚请高手赐教

解决方案 »

  1.   

    较大的undo,较好的cpu,单纯从sql角度没什么提高的办法
      

  2.   

    增大sga的大小,让排序在内容中完成,可以节省时间,
    这只是一种情况,具体情况具体分析
      

  3.   

    分析一下表试试analyze table
    如果表里的数据更新比较频繁,重建一下索引
    我也被这个问题困扰了很久了
    接近百万的数据 不排序耗时零点几秒,排序的话 几十秒 差距太大了
      

  4.   

    排序肯定要耗费时间,oracle排序的操作依赖于内存排序(pga_sort_size)和物理磁盘的排序(临时表空间),当然是在内存中排序的时间远远短于物理磁盘的排序。你在不使用order by 的时候oracle避免的排序的操作,肯定比不使用排序的时间短,如果你想缩短这个时间可以采取增加pga_sort_size的大小。这样使得你的操作在内存中进行,这样的速度肯定比较快,但是这个值不得太大,不然造成了太多的内存的浪费
      

  5.   

    尝试修改PGA试试:
    PGA的大小直接影响了性能,尤其针对会导致排序的SQL查询。以下几种情况需要提供足够的PGA:导致排序的操作如 ORDER BY、GROUP BY、 ROLLUP等操作
    哈希连接
    位图合并
    位图创建
    批量数据装载在Oracle 10g/11g版本中,PGA的管理被自动化设置,成为自动的PGA内存管理。在该方式中,Oracle将动态调整PGA内存的大小为
    SGA内存的20%,最小值是10MB。初始化参数PGA_AGGREGATE_TARGET显示了当前PGA的分配情况。
    Oracle 提供了两个PGA建议
    性能视图:V$PGA_TARGET_ADVICE和V$PGA_TARGET_ADVICE_HISTOGRAM。sys@ORCL> show parameter pgaNAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    pga_aggregate_target                 big integer 58M
    sys@ORCL> SELECT round(pga_target_for_estimate / 1024 / 1024) est_target_mb,
      2         estd_pga_cache_hit_percentage,
      3         estd_overalloc_count,
      4         pga_target_factor
      5  FROM   v$pga_target_advice
      6  ORDER  BY 1;EST_TARGET_MB ESTD_PGA_CACHE_HIT_PERCENTAGE ESTD_OVERALLOC_COUNT PGA_TARGET_FACTOR
    ------------- ----------------------------- -------------------- -----------------
               15                            96                    7               .25
               29                            96                    7                .5
               44                            96                    7               .75
               58                           100                    5                 1
               70                           100                    0               1.2
               81                           100                    0               1.4
               93                           100                    0               1.6
              104                           100                    0               1.8
              116                           100                    0                 2
              174                           100                    0                 3
              232                           100                    0                 4
              348                           100                    0                 6
              464                           100                    0                 8你可以参考下这里:
    重学PGA 
      

  6.   

    1
    如果排序字段是not null 则可以建立索引2
    加大
    sort_area_size 的大少估计是你的count(*)的记录 的大少超过了sort_area_size 然后就使用了临时表空间 所以性能就下降了show parameter sort_area_size ---查看多少 至少要超过count(*)*count(*)
      

  7.   


     alter session set sort_area_size=100000000
    试试修改这个的谨慎