各位大大,小弟在学习管理一个别人已经建立好的远程数据库,遇到了一个停止响应的问题,先说说数据库环境:
数据库每分钟接收1000+条即时生成的数据
数据表TEST已经存储了100万条以上的数据现在我想求指定种类的和最晚生成时间的记录内容
当语句写成
select max(time) from test;

select 列1,列2,time,种类 from 种类 ='AA'
都可以正常的返回数据但是如果写成select max(time) from test where 种类 ='AA'
整个sql_plus就会停止响应,用TOAD的话也会一直卡在读秒请问一下,这里的问题是出在哪里呢,有办法解决吗?
(按理来说如果数据内容太大了的话 ,直接搜索  种类 ='AA' 会更卡啊)

解决方案 »

  1.   

    (1)百万级一般不应该很卡的,除非你的临时表空间不够了
    (2)上述几个SQL的执行时间应该大体相当
    (3)可能慢的原因是你执行SQL的时候,其他应用正在插入该表数据。插入过程中会导致表锁和等待。如果你查询时正好有很多数据正在插入,则会表现得有点卡
      

  2.   

    正好是楼上说的这种情况,在我查询的同时有很多数据在插入
    但是用select max(time) from test where 种类 ='AA',差不多4-5秒就返回数据了,
    只要加上级MAX(TIME)直接就卡在等待那里了,四五分钟都没有用
    这不是有点卡啊....卡巴死机啊
      

  3.   

    1楼正确。
    也可以改变sql:求第一条数据的方法,求得最大时间,试试这样如何。
      

  4.   


    方法一:利用自动跟踪
    --------------------------------------------------------
    语法: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
    sql>set autotrace traceonly exp
    sql>select * from tab;
    Execution Plan
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=202 Card=1098 Byte
              s=87840)
       1    0   HASH JOIN (RIGHT OUTER) (Cost=202 Card=1098 Bytes=87840)
       2    1     TABLE ACCESS (FULL) OF 'TAB$' (CLUSTER) (Cost=176 Card=1
              554 Bytes=10878)
       3    1     TABLE ACCESS (FULL) OF 'OBJ$' (TABLE) (Cost=26 Card=1098
               Bytes=80154)方法二:explain plan
    --------------------------------------------------------------------------
    SQL> explain plan for select * from tab;
    Explained.
    SQL> select * from table(dbms_xplan.display());
    Execution Plan
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=24 Card=8168 Bytes
              =16336)
       1    0   COLLECTION ITERATOR (PICKLER FETCH) OF 'DISPLAY'
      

  5.   

    还有工具类比如toad直接可以看到explain plan选项卡的输出窗口。