确定 SQL 查询结果集的大小(以 KB 为单位)

5

我希望找到一种方法来获取OracleDB结果集的kb大小。 虽然我不是系统管理员,但经常运行返回超过100k行的查询,我需要找到一种确定总kb大小的方法。 谢谢。

2个回答

14

在 SQL*Plus 中:

SET AUTOTRACE ON

SELECT *
FROM emp
WHERE rownum <= 100;

        27  recursive calls
         0  db block gets
        19  consistent gets
         4  physical reads
         0  redo size
     **11451  bytes sent via SQL*Net to client**
       314  bytes received via SQL*Net from client
         8  SQL*Net roundtrips to/from client
         0  sorts (memory)
         0  sorts (disk)
       100  rows processed

使用AUTOTRACE需要PLUSTRACE角色,该角色默认未授予。 了解更多


1
哇,太棒了。Autotrace 竟然“知道”你对发送的字节数感兴趣,并用星号标记了这些行?不过你会认为 Oracle 至少会修复导致数字错位的错误吧。 :-) 比我回答更好,加1。 - paxdiablo
感谢您的回答,确实自动跟踪功能非常好。但我还有一个问题——我使用SQL Developer时,似乎有一些未返回的结果(这就是我需要的内容)。 当我打开自动跟踪并运行SELECT查询时,我得到了以下结果: 统计信息 685个递归调用 3个数据库块获取 22744次一致性获取 247个物理读取 0个重复大小 0个工作区执行-多通道 0个解析时间CPU 0个解析时间已过去 0个帧签名不匹配 2次执行计数有什么技巧可以进一步优化,以检索所需的结果吗? - shermy
1
请注意,“通过SQL * Net发送到客户端的字节”表示从服务器到客户端的总流量,其中包括不仅仅是结果集本身。例如:SELECT null FROM DUAL; => 411字节通过SQL * Net发送到客户端(在Oracle 11.1上测试)。 - Jeffrey Kemp

0
通常情况下,您可以使用count(*)替换列列表以返回行数。
我不确定在具有许多连接等复杂查询的情况下是否有效,但对于较简单的查询,这应该是可以的。请进行替换:
select a,b,c from t where a > 7;

使用

select count(*) from t where a > 7;

这将在运行真正的查询之前为您提供行计数。只需记住,在计数查询和真实查询之间,数据可能会发生变化(希望不会太多)。了解数据属性将使您能够从行计数中近似计算出千字节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接