如何计时oracle选择查询

时间:2010-11-17 16:24:25

标签: oracle plsql

了解oracle select语句需要多长时间的最佳方法是什么。我有以下查询,我想找出时间,但是,由于此查询带来了四千条记录,并且在屏幕上显示这四千条记录需要时间,所说明的经过时间可能不正确。

有没有办法可以将它包装到游标中然后从sql plus运行它以便我得到执行它所需的正确时间?

SELECT a.code, NVL(a.org, ' '), NVL(a.office_number, ' '), SUBSTR(a.code, 0, 2) 
FROM PARTICIPANT a WHERE a.type_code = 'PRIME';

5 个答案:

答案 0 :(得分:4)

我可以想到几种方法。

我通常通过将其运行到CREATE TABLE AS SELECT....的表中来执行此类操作,这意味着我经常将我的架构与名为MIKE_TEMP_1的许多表混淆。

其他选项在SQL * Plus中使用SET AUTOTRACE TRACEONLY,它应该运行所有查询但是禁止打印结果。

答案 1 :(得分:4)

在SQL * Plus中,您还可以使用简单的TIMING选项:

SQL> SET TIMING ON
SQL> SELECT bla FROM bla...
...
Elapsed: 00:00:00:01
SQL> SELECT bar FROM foo...
...
Elapsed: 00:00:23:41
SQL> SET TIMING OFF

这将分别报告每个语句的时间信息。

另一种选择是设置个人计时器:

SQL> TIMING START mytimer
SQL> ... run all my scripts ...
SQL> TIMING STOP
timinig for: mytimer
Elapsed: 00:00:08.32

您甚至可以嵌套这些单独的计时器 - TIMING STOP将最近的计时器弹出堆栈。

答案 2 :(得分:3)

浮现在脑海中的选项:

a)使用外部选择,如果优化器破坏它可能不完全准确,但可以给出一个好主意:

SELECT COUNT(*) from (
    SELECT a.code, NVL(a.org, ' '), NVL(a.office_number, ' '), SUBSTR(a.code, 0, 2) 
    FROM PARTICIPANT a WHERE a.type_code = 'PRIME'
);

b)将其放入脚本中,从命令行运行并将输出重定向到文件。

c)打开线轴并关闭终止(不确定那个)。

d)set autotrace traceonly(@MikeyByCrikey打败了我。)

答案 3 :(得分:1)

您可以转到V $ SQL,其中包含以下列:

APPLICATION_WAIT_TIME
CONCURRENCY_WAIT_TIME
CLUSTER_WAIT_TIME
USER_IO_WAIT_TIME
PLSQL_EXEC_TIME
CPU_TIME
ELAPSED_TIME

但它们是该SQL的所有执行的聚合。如果没有其他人正在运行SQL,您可以执行前/后快照并找出差异。

答案 4 :(得分:0)

只是不显示查询结果

SET TERMOUT OFF