Oracle SQL-检查SQL数据大小

Oracle SQL-检查SQL数据大小,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我们在距离我们千里之外的数据库上工作,我们想检查sql性能或传输是否有问题(我们不是数据库专家)。问题是-如何检查sql查询返回的数据的大小?可能吗?假设我们有这个查询: SELECT a.col1, b.col2, c.col1 FROM a INNER JOIN b on b.a_id=a.id LEFT JOIN c on c.b_id=b.id WHERE a.somecol='data'; 需要将多少数据从dba传输到我们的应用程序?您可以获得接收到的所有数据的长度,甚至在执行查询之

我们在距离我们千里之外的数据库上工作,我们想检查sql性能或传输是否有问题(我们不是数据库专家)。问题是-如何检查sql查询返回的数据的大小?可能吗?假设我们有这个查询:

SELECT a.col1, b.col2, c.col1
FROM a
INNER JOIN b on b.a_id=a.id
LEFT JOIN c on c.b_id=b.id
WHERE a.somecol='data';

需要将多少数据从dba传输到我们的应用程序?

您可以获得接收到的所有数据的长度,甚至在执行查询之后(无预先假设)

PS:您对表“
a
”和“
c
”使用了相同的列名,即
col1
,在向光标赋值时可能会出错。要解决此问题,将显式声明游标或使用REF游标。

运行

显示

explain计划应该为您提供访问字节数的估计值


一种更简单、更准确的方法从SQL*Plus中提取数据,这应该会给出一个类似的数字

SET AUTOTRACE TRACEONLY


SELECT a.col1, b.col2, c.col1
FROM a
INNER JOIN b on b.a_id=a.id
LEFT JOIN c on c.b_id=b.id
WHERE a.somecol='data';
这应该会给出一些统计数据:

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         44  consistent gets
          0  physical reads
          0  redo size
      24849  bytes sent via SQL*Net to client
        408  bytes received via SQL*Net from client
          6  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         66  rows processed
SET AUTOTRACE TRACEONLY


SELECT a.col1, b.col2, c.col1
FROM a
INNER JOIN b on b.a_id=a.id
LEFT JOIN c on c.b_id=b.id
WHERE a.somecol='data';
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         44  consistent gets
          0  physical reads
          0  redo size
      24849  bytes sent via SQL*Net to client
        408  bytes received via SQL*Net from client
          6  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         66  rows processed