`
wangting424
  • 浏览: 14509 次
社区版块
存档分类
最新评论

jdbc 执行explain plan set 输出执行计划

阅读更多
最近写个程序,遍历所有日志中的sql语句,返回含有全表扫描的sql,用explain plan set 简单实现,执行计划分析格式没看懂,只能sql拷贝出来青蛙中执行,不过还是比以前方便多了

源码:
    public static void main(String[] args) throws Exception {
   
    String id="1";
    Driver d = (Driver) Class.forName("oracle.jdbc.OracleDriver").newInstance();
        Connection conn = d.connect("jdbc:oracle:thin:bap1/1@//192.168.56.11:1521/XE", new Properties());
       
        Statement statement1 = conn.createStatement();
        long t1=System.currentTimeMillis();
        statement1.execute("explain plan set STATEMENT_ID = '"+ id + "' for " + "select * from ATTENDENCE_ACCOUNTS");
        statement1.executeQuery("select to_clob(dbms_xplan.build_plan_xml(statement_id => '"+ id + "')) AS XPLAN FROM dual");
        ResultSet resultSet = statement1.getResultSet();           
        while (resultSet.next()) {
//            executionPlan = resultSet.getSQLXML(1).getString();
        if (resultSet.getString(1).indexOf("name=\"TABLE ACCESS\" options=\"FULL\"")>0){
        System.out.println(resultSet.getString(1));
        }
           
        }
        System.out.println(System.currentTimeMillis()-t1);
    }

输出结果:
<plan>
  <operation name="SELECT STATEMENT" id="0" depth="0" pos="2">
    <card>31</card>
    <bytes>1085</bytes>
    <cost>2</cost>
    <io_cost>2</io_cost>
    <cpu_cost>24791</cpu_cost>
    <time>00:00:01 </time>
  </operation>
  <operation name="TABLE ACCESS" options="FULL" id="1" depth="1" pos="1">
    <object>ATTENDENCE_ACCOUNTS</object>
    <card>31</card>
    <bytes>1085</bytes>
    <cost>2</cost>
    <io_cost>2</io_cost>
    <cpu_cost>24791</cpu_cost>
    <time>00:00:01 </time>
    <project>&quot;ATTENDENCE_ACCOUNTS&quot;.&quot;ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;VERSION&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;CREATE_STAFF_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;CREATE_TIME&quot;[TIMESTAMP,11], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;DELETE_STAFF_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;DELETE_TIME&quot;[TIMESTAMP,11], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;MODIFY_STAFF_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;MODIFY_TIME&quot;[TIMESTAMP,11], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;VALID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;CID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;CREATE_DEPARTMENT_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;CREATE_POSITION_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;EFFECT_STAFF_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;EFFECT_TIME&quot;[TIMESTAMP,11], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;OWNER_DEPARTMENT_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;OWNER_POSITION_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;OWNER_STAFF_ID&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;POSITION_LAY_REC&quot;[VARCHAR2,1020], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;STATUS&quot;[NUMBER,22], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;TABLE_NO&quot;[VARCHAR2,1020], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;ACC_MODEL&quot;[VARCHAR2,1020], &quot;ATTENDENCE_ACCOUNTS&quot;.&quot;ACC_TIME&quot;[DATE,7]</project>
    <qblock>SEL$1</qblock>
    <object_alias>ATTENDENCE_ACCOUNTS@SEL$1</object_alias>
    <other_xml>
      <info type="db_version">11.2.0.2</info>
      <info type="parse_schema"><![CDATA["BAP1"]]></info>
      <info type="plan_hash">2738177799</info>
      <info type="plan_hash_2">1344836542</info>
      <outline_data>
        <hint><![CDATA[FULL(@"SEL$1" "ATTENDENCE_ACCOUNTS"@"SEL$1")]]></hint>
        <hint><![CDATA[OUTLINE_LEAF(@"SEL$1")]]></hint>
        <hint><![CDATA[ALL_ROWS]]></hint>
        <hint><![CDATA[DB_VERSION('11.2.0.2')]]></hint>
        <hint><![CDATA[OPTIMIZER_FEATURES_ENABLE('11.2.0.2')]]></hint>
        <hint><![CDATA[IGNORE_OPTIM_EMBEDDED_HINTS]]></hint>
      </outline_data>
    </other_xml>
  </operation>
</plan>
分享到:
评论

相关推荐

    ORACLE EXPLAIN PLAN的总结

    Oracle的Explain Plan是数据库管理员和开发人员用来分析SQL查询执行计划的重要工具。它能提供关于如何执行SQL语句的详细信息,包括哪些操作(如全表扫描、索引访问等)将被使用,以及这些操作的预计成本、时间及资源...

    oracle explain plan总结

    - `TABLE_NAME` 是存储执行计划信息的目标表,默认为`plan_table`。 - `&lt;sql_statement&gt;` 是要分析执行计划的SQL语句。 例如,如果要分析`select * from t_test;`这条SQL语句的执行计划,可以使用以下命令: ```...

    Oracle中EXPLAIN PLAN的使用技巧

    由于PLAN_TABLE中存储的都是EXPLAIN PLAN的输出信息,因此通过编写简单的SELECT语句,就可以获取到完整的执行计划。然而,在Oracle 9i及更高版本中,引入了DBMS_XPLAN函数,这是一个更为便捷和强大的方式,可以直接...

    Oracle中explain_plan的用法

    Oracle 中的 explain_plan 是一个强大的分析工具,能够帮助用户了解 SQL 语句的执行计划,通过它可以了解 Oracle 是如何连接表、使用什么方式扫描表(索引扫描或全表扫描)以及使用到的索引名称。下面详细讲解 ...

    explain plan interpreting

    在Oracle数据库系统中,"explain plan" 是一个关键的工具,用于分析和理解SQL查询的执行计划,也就是数据检索的路径。它可以帮助数据库管理员和开发人员优化查询性能,确保数据库高效运行。以下是对"explain plan ...

    数据库调优:ORACLE EXPLAIN PLAN的总结

    在数据库管理领域,Oracle数据库的性能优化是一项至关重要的任务,其中`EXPLAIN PLAN`是数据库管理员和开发人员常用的工具,用于分析SQL查询的执行计划,从而理解查询如何在数据库中运行,找出潜在的性能瓶颈。...

    Oracle执行计划.ppt

    * Explain 语句:使用 Explain 语句可以获取执行计划,例如:Explain Plan Set STATEMENT_ID='testplan' For Select ….. * Autotrace 工具:Autotrace 是 Oracle 提供的一种工具,可以自动跟踪执行计划。 * 其他...

    oracle explain plan

    ### Oracle Explain Plan详解 #### 一、引言 在Oracle数据库中,查询优化器(Oracle Optimizer)的主要职责是为SQL语句确定最高效的执行计划。优化器通过收集关于数据的统计信息,并利用Oracle数据库的各种特性(如...

    达梦数据库执行计划操作符介绍

    在执行计划中,NSET2操作符将被展示为: ```sql #NSET2: [6, 1, 0] #PRJT2: [6, 1, 0]; exp_num(2), is_atom(FALSE) #CSCN2: [6, 1, 0]; INDEX33555457(T1) ``` 3. SLCT2关系的“选择”(select)运算 SLCT2是...

    Oracle解释计划 执行计划

    1. 使用EXPLAIN PLAN语句:这是一种常用的方法,用户可以通过执行EXPLAIN PLAN语句,然后查询输出表来获取SQL语句的执行计划。例如,使用EXPLAIN PLAN FOR SELECT语句后,可以查询PLAN_TABLE表来查看具体的执行计划...

    Oracle执行计划1.ppt

    其中,Explain 是通过 Execute Plan 语句生成执行计划的,Autotrace 是通过设置 autotrace 参数生成执行计划的。 在 Oracle 中,生成执行计划需要创建一个 Plan_table 表,用于存储执行计划的信息。该表包括了执行...

    获取SQL语句的执行计划v1

    本文档详细介绍了几种不同的方法来获取SQL语句的执行计划,包括使用autotrace、EXPLAIN PLAN以及DBMS_XPLAN.DISPLAY_CURSOR等。 #### 方法1:使用autotrace查看执行计划 **配置使用autotrace** 为了能够使用...

    Oracle执行计划.pptx

    1. 使用 Explain 语句:Explain 语句可以用来获取执行计划,例如:Explain plan set STATEMENT_ID='testplan' for select * from dual; 2. 使用 Autotrace 语句:Autotrace 语句可以用来获取执行计划,例如:set ...

    hive执行计划可视化工具

    - **Hive自带的Explain命令**:虽然它不是图形化的,但可以通过输出文本信息来查看执行计划的概要。 - **Hue**:一个流行的Hadoop用户界面,包括一个内置的Hive编辑器,它可以显示执行计划的可视化表示。 - **Tez...

    plan_table学习笔记

    使用 EXPLAIN PLAN 语句可以生成执行计划,该语句的基本语法为: ``` EXPLAIN PLAN [ SET STATEMENT_ID [=] &lt;string literal&gt; ] [ INTO &lt;table_name&gt; ] FOR ``` 其中,STATEMENT_ID 指定了执行计划的名称,如果不...

    ORACLE命令行查看实际的执行计划

    `EXPLAIN PLAN FOR`命令并不真正执行查询,而是为查询生成一个逻辑执行计划。 4. **查看执行计划**: 为了显示实际的执行计划,我们需要使用`DBMS_XPLAN.DISPLAY`过程。在执行了`EXPLAIN PLAN FOR`后的SQL语句后,...

    100 透彻研究通过explain命令得到的SQL执行计划(1).pdf

    本文将详细探讨通过explain命令获得的SQL执行计划中包含的各种元素,以便于理解每个部分所代表的具体含义。 首先,当运行explain命令之后,你会得到一个执行计划,这个计划中包含了多个字段,它们分别是id、select_...

    oracle怎么查看执行计划

    同样,与EXPLAIN PLAN相比,AUTOTRACE不仅展示了执行计划,还执行了SQL语句,从而能够提供更加准确的统计信息。 #### 准备工作 为了使用AUTOTRACE,需要进行以下准备工作: 1. **创建PLAN_TABLE** - 每个需要运行...

    Oralce 19c执行计划调优学习笔记

    Oralce 19c执行计划调优学习笔记 1_执行计划.pdf 2_explain plan for.pdf 3_dbms_xplan.display_cursor.pdf 4_执行计划顺序.pdf 5_直方图.pdf

Global site tag (gtag.js) - Google Analytics