我有一个出口报告,excel文件的要求。该报告将包含的行数量巨大(100K甚至280K行)。它需要发送电子邮件至与估计的时间用户查询数据库,获取数据,并将其导出到Excel文件知道多久,他/她会等待,直到他/她收到带有下载链接的电子邮件。 我所做的是以下几点:
Oracle.DataAccess.Client
)所请求的过滤器,但与Count(*)
来检索要生成行的总数。System.Diagnostics.Stopwatch
类来衡量在最坏的情况下经过的时间来获取x行数)我知道这种做法是不实际的,因为在这种情况下,我不得不两次,每次报告执行相同的查询。 有没有更好的方法来实现这一目标,而无需执行两次相同的查询?
这可能不是100%准确。如果您正在执行每一次(具有参数)相同的查询,你可以看看在V $ SQLAREA视图的SQL所经过的时间。为了找到查询,执行是这样的:
select sql_text, sql_id from v$sqlarea where sql_text like '%foo%;
(替换从查询了一套独特的文本富)。
一旦你的SQL_ID,你可以得到的平均时间(毫秒)的SQL:
select (ELAPSED_TIME/executions)/1000 from v$sqlarea
where sql_id = '5bmcms41p86gf'
你从以前查询获得的SQL_ID取代“5bmcms41p86gf”。请注意,在V $ SQLAREA记录可一定量的时间后丢弃。