代码之家  ›  专栏  ›  技术社区  ›  Rickless

在查询和导出报表时为用户发送精确的时间估算

  •  1
  • Rickless  · 技术社区  · 5 年前


    我所做的是:

    1. 使用数据库上请求的筛选器执行查询(使用 Oracle.DataAccess.Client Count(*) 取回 要生成的行总数。
    2. System.Diagnostics.Stopwatch 类来测量中经过的时间 获取x行数的最坏情况)

    我知道这种方法不实用,因为在这种情况下,我必须为每个报表执行两次相同的查询。
    有没有更好的方法来实现这一点,而不必执行相同的查询两次?

    1 回复  |  直到 5 年前
        1
  •  1
  •   OldProgrammer    5 年前

    这可能不是100%准确。如果每次执行相同的查询(使用更改的参数),可以在V$sqlarea视图中查看sql的运行时间。要查找查询,请执行以下操作:

    select sql_text, sql_id from v$sqlarea where sql_text like '%foo%;
    

    (将foo替换为查询中唯一的一组文本)。

    获得sql_id后,可以获得sql的平均运行时间(以毫秒为单位):

    select  (ELAPSED_TIME/executions)/1000 from v$sqlarea
    where sql_id = '5bmcms41p86gf'
    

    将“5BMCS41P86GF”替换为从上一个查询中获得的sql_id。请注意,v$sqlarea中的记录可能会在一段时间后被丢弃。