各位大大,小弟在学习管理一个别人已经建立好的远程数据库,遇到了一个停止响应的问题,先说说数据库环境:
数据库每分钟接收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' 会更卡啊)
数据库每分钟接收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' 会更卡啊)
(2)上述几个SQL的执行时间应该大体相当
(3)可能慢的原因是你执行SQL的时候,其他应用正在插入该表数据。插入过程中会导致表锁和等待。如果你查询时正好有很多数据正在插入,则会表现得有点卡
但是用select max(time) from test where 种类 ='AA',差不多4-5秒就返回数据了,
只要加上级MAX(TIME)直接就卡在等待那里了,四五分钟都没有用
这不是有点卡啊....卡巴死机啊
也可以改变sql:求第一条数据的方法,求得最大时间,试试这样如何。
方法一:利用自动跟踪
--------------------------------------------------------
语法: 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'