如何解决如何获取查询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 举报,一经查实,本站将立刻删除。