快速得到SQL带A-Time时间的执行计划的小技巧
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,快速得到SQL带A-Time时间的执行计划的小技巧使用spool把结果输出到文件,然后直接去文件查看执行计划即可得到带时间的执行计划的方法有两种:1、在会话设置参数statistics_level=a
千家信息网最后更新 2026年11月02日快速得到SQL带A-Time时间的执行计划的小技巧
快速得到SQL带A-Time时间的执行计划的小技巧
使用spool把结果输出到文件,然后直接去文件查看执行计划即可
得到带时间的执行计划的方法有两种:
1、在会话设置参数statistics_level=all
alter session set statistics_level=all;执行SQLselect * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
2、在语句中使用hint(/*+ gather_plan_statistics */),然后查出这个SQL的SQL_ID,然后再去查询执行计划
执行SQLselect /*+ gather_plan_statistics */ count(*) from test;查询SQL的SQL_IDselect sql_id,sql_text from v$sql where sql_text like '%/*+ gather_plan_statistics */%';查看执行计划select * from table(dbms_xplan.display_cursor('sql_id',null,'allstats'));以上的两种方式都可以得到带时间的执行计划。
但是用这样的方式去查看执行计划,有一个弊端:必须等到SQL语句的全部的记录在屏幕输出,然后才可以查看执行计划。
为了不需要等待SQL执行完,然后才可以查看执行计划;以及不需要在屏幕输出SQL的执行结果刷屏,
可以采用把SQL的结果以及执行计划输出到文件,然后去文件查看执行计划。
!!!注意:!!!
使用spool把结果输出到文件,是把查询结果输出到文件,包含真实的数据,因此需要慎重考虑,
是否可以采取这样的方式进行查询。
测试:
需要查看一条SQL的带时间的执行计划
方法1、
设置会话参数alter session set statistics_level=all;执行SQLselect /*+ index(t1 idx_t1_c1) */* from t1 where c1 <= 90000;需要等待执行完SQL,然后才可以查询查看执行计划select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
方法2、
执行带hint的SQLselect /*+ gather_plan_statistics index(t1 idx_t1_c1) */* from t1 where c1 <= 90000;需要等待执行完SQL查询该SQL对应的SQL_IDselect sql_id,sql_text from v$sql where sql_text like '%/*+ gather_plan_statistics */%';查看执行计划(根据这条SQL的SQL_ID查询)select * from table(dbms_xplan.display_cursor('sql_id',null,'allstats'));方法3、
先编写脚本
vi test.sqlset line 200 pages 999set timing onset termout offspool /home/oracle/test.txtalter session set statistics_level=all;select /*+ index(t1 idx_t1_c1) */* from t1 where c1 <= 90000;select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));spool off-----------参数解释:set line 200 pages 999 设置输出格式set timing on设置时间set termout off设置不让脚本的内容在屏幕输出spool /home/oracle/test.txt 打开spool;并且设置输出文件的位置以及名称spool off关闭spool,否则会一直把sqlplus里的内容写道test.txt文件中登录到sqlplussqlplus / as sysdba(或者执行该SQL的用户)执行该脚本@/home/oracle/test.txt查看文件中的执行计划90000 rows selected.Elapsed: 00:00:25.90PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID caumajpb0jz24, child number 1 ------------------------------------- select /*+ index(t1 idx_t1_c1) */* from t1 where c1 <= 90000 Plan hash value: 4200789634 ------------------------------------------------------------------------------------------------------------ | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | ------------------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | | 90000 |00:00:14.07 | 456K| 315K| | 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 90001 | 90000 |00:00:14.07 | 456K| 315K| |* 2 | INDEX RANGE SCAN | IDX_T1_C1 | 1 | 90001 | 90000 |00:00:00.08 | 6187 | 0 | ------------------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("C1"<=90000) 19 rows selected.Elapsed: 00:00:00.08等执行完毕去查看该文件即可,在文件最低端可以看到执行计划,省去了中间刷屏的时间,
但是产生了一个带有数据的文件,当记录很多时,最好不要使用,
此方法只作为小技巧,需要看具体情况去判断是否使用该方法。
文件
输出
查询
时间
方法
结果
参数
屏幕
方式
脚本
技巧
内容
数据
语句
位置
低端
名称
弊端
情况
最好
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州万易互联网科技有限公司
云信互联网科技有限公司
互联网是不是新科技
互联网科技有限公司图片
科技信息互联网
互联网科技战争
猪兼强互联网科技
上海致骋互联网科技
互联网科技logo设计
天下捷融互联网科技
衡水科技产业互联网平台
科技与互联网的利与弊
互联网科技教育视频
群盈汇互联网科技有限公司
九思连强互联网电子科技有限公司
互联网科技接地气
广州智享互联网科技
众联互联网络科技
科技互联网专业工作会议发言稿
利用互联网等科技手段
河南真二互联网科技有限公司
互联网与未来科技
云电互联网科技
互联网科技论坛
多迪互联网科技有限公司
广州优美互联网科技
雨阳互联网卡科技有限公司
陕西云淼互联网科技公司
瑞安市蟠桃会互联网科技有限公司
科技互联网企业在行动