Oracle 直接按照时段查询只需要0.06s,假如order by 时间后需要60S数据库已经运行一年了,之前都是正常的网上查询说有可能是TEMP空间满了,压缩后依然没有效果,数据库日志文件没有报错,求大神指导

解决方案 »

  1.   

    group by,order by都一样,需要返回所有数据才能分组或者排序(有特例,比如order by之后的分页可能不需要),你按照时间段查询,是因为客户端自作主张地给你没有返回所有数据,所以快。
      

  2.   


    这个库和慢的库,数据量是否一样?满足时间条件的数据量是否一致?如果都是,那么就工具来辅助调查:
    在你的sql里加入gather_plan_statistics提示,比如:select /*+gather_plan_statistics*/ .... 
    执行你的SQL之后,再跑如下命令把结果贴上来:
    select * from table(dbms_xplan.display_cursor(null,null, 'last allstats'));
    注意在执行你的SQL之后,到执行上述命令之间,不能执行其他任何SQL,另外,不要使用plsql developer,因为这个工具会隐含执行一些命令,影响输出结果。
      

  3.   

    此外,调优的时候除非你对oracle的优化器和体系架构较多的了解,最好不要拿不同的库做比较,这会将问题复杂化,影响你解决问题的思路。
      

  4.   

    新手,求大神指导SQL> select * from table(dbms_xplan.display_cursor(null,null, 'last allstats'));
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------SQL_ID  2s422sp3b1fjg, child number 0
    -------------------------------------
    select  /*+ gather_plan_statistics */* from thunder2019 where
    datetime>to_Date('2019-10-16 15:00:00','yyyy-mm-dd hh24:mi:ss') order
    by datetime descPlan hash value: 2282267311--------------------------------------------------------------------------------------------------------------------------------
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------| Id  | Operation          | Name        | Starts | E-Rows | A-Rows |   A-Time
     | Buffers | Reads  |  OMem |  1Mem | Used-Mem |--------------------------------------------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT   |             |      1 |        |      0 |00:00:30.90 |     486K|    486K|       |       |          ||   1 |  SORT ORDER BY     |             |      1 |   5397 |      0 |00:00:30.90 |     486K|    486K|  1024 |  1024 |          |PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    |*  2 |   TABLE ACCESS FULL| THUNDER2019 |      1 |   5397 |      0 |00:00:30.90 |     486K|    486K|       |       |          |--------------------------------------------------------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------   2 - filter("DATETIME">TO_DATE(' 2019-10-16 15:00:00', 'syyyy-mm-dd hh24:mi:ss'))
    Note
    -----
       - dynamic sampling used for this statement (level=2)
    已选择25行。
      

  5.   

    从这个执行计划来看,这只是纯粹的datetime字段没有索引,在这个字段上创建个索引吧
      

  6.   

    1、建议问优化问题时,提供SQL语句和相应的执行计划,这样,大家可以一目了然。