如何解决ORACLE下大批量记录查询时的响应时间问题(利用PRO*C)
背景描述:
有一个日志表,用来存储应用系统中的一些业务操作情况。
table operlog(
name varchar2(16) not null,
cmdcode number(5,0) not null,
result number(5,0) not null,
opertime number(10,0) not null)
该表需要保留一年的日志记录大约为1000~2000万条。因为是要进行打包并网络传输,
所以一次只能返回给客户端100条记录。而且是按照时间的从新到旧的顺序显示,即需要排序。下一次查询时,会把先前的查询条件和前次发送的最后一条记录的 opertime 值再返回给
PRO*C 程序(用来实现操作日志的不同条件查询)。
有两种做法:一种是利用游标存储所有符合条件的记录,在FETCH时只取出前面的100条。
这样做的坏处是当数据记录量特别大时如上百万、上千万条时,会很难处理。
一种是也利用游标,但由ORACLE返回指定行数的记录。
比如,用 select * from operlog where name='test1' and rownum < 101
order by time desc;
但有时发现返回的不符合要求,
大家有没有类似的问题即:
1) 符合查询条件的记录很多,数十万,数百万条,当然有时也会很少。
2) 每次只能返回一小部分,如100条,客户可以继续浏览后在的。
3) 日期要从新到旧。
大家是怎么做的呢?
比如第一种方法,是不是可以通过扩大内存,临时表空间,优化索引等措施达到一定数量级数据记录的可接受的响应速度。
如果采用第二种方法,有没有不用 rownum 的方法。
还有没有其它方案,比如视图。
欢迎大家讨论。