微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取查询sql Oracle DB的每个表中访问的行数

如何解决如何获取查询sql Oracle DB的每个表中访问的行数

我必须在 sql 查询 - oracle db 中获取每个表中访问的行数。例如:

select *
from a inner join b on  a.t = b.t
where a.x in (1,2,3)

result expect:
table a: 5 rows
table b: 10 rows

我用过

EXPLAIN PLAN FOR ...

然后

SELECT PLAN_TABLE_OUTPUT
FROM TABLE(DBMS_XPLAN.disPLAY);

但行数似乎并不完全正确。结果是解释计划。我该如何解决。谢谢

解决方法

看起来统计数据不是最新的。

收集两个表的统计信息,然后再次运行解释计划。如何?像这样:

SQL> begin
  2    dbms_stats.gather_table_stats('SCOTT','EMP');
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL>
,

我做到了。找出在解释平原访问的行。我这样做

解释计划 选择 ... 从 ... 哪里...

SQL 内容存储在 V$SQL 中。和结果解释普通存储在 V$SQL_PLAN

SELECT SQL_ID,OPERATION,OPTIONS,OBJECT_NAME,OBJECT_TYPE,CARDINALITY
FROM V$SQL_PLAN

你可以展示它

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY());

找出在执行计划中访问的行。我这样做

-- ALTER SESSION SET STATISTICS_LEVEL = ALL;
SELECT /*+ gather_plan_statistics TEST_PLAN*/ *
from ...
where ...

结果解释明文存储在 V$SQL_PLAN_STATISTICS_ALL

SELECT SQL_ID,CARDINALITY,LAST_OUTPUT_ROWS
FROM V$SQL_PLAN_STATISTICS_ALL

你可以展示它

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('sqlid','ALLSTATS LAST'));

附加,您可以在

中查看
SELECT *
FROM SYS.DBA_HIST_SQLTEXT

SELECT SQL_ID,CARDINALITY
FROM SYS.DBA_HIST_SQL_PLAN

SELECT SQL_ID,LAST_OUTPUT_ROWS
FROM SYS.DBA_SQLSET_PLANS;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?