【问题标题】:Java Parsing Oracle Explain PlanJava解析Oracle解释计划
【发布时间】:2013-03-01 09:46:59
【问题描述】:

我想知道是否有任何库允许将 oracle 的解释计划解析为数据结构。

给定以下查询:

 select prod_category, avg(amount_sold)
 from sales s, products p
 where p.prod_id = s.prod_id
 group by prod_category;

解释计划可能如下所示:

 ------------------------------------------
  Id   Operation              Name   
 ------------------------------------------
    0  SELECT STATEMENT              
    1   HASH GROUP BY                
    2    HASH JOIN                   
    3     TABLE ACCESS FULL   PRODUCTS
    4     PARTITION RANGE ALL        
    5      TABLE ACCESS FULL  SALES  
 ------------------------------------------

我想要一个将计划解析为数据结构的解析器,该数据结构允许对计划进行可视化和分析,如下所示:

  SELECT STATEMENT
        |
     GROUP BY
        |
       JOIN
   _____|______
  |            |
 ACCESS     ACCESS
 (PRODUCTS) (SALES)

我注意到 Oracle 的 SQLDeveloper 将计划可视化。我不愿意手动解析文本,所以我想知道是否有任何库可以帮助解析计划。

【问题讨论】:

  • 我认为您可以使用 JDBC 在 XML 中请求解释计划

标签: java sql oracle jdbc sql-execution-plan


【解决方案1】:

计划已经存储为层次结构以便于可视化:

  select 
    id, 
    parent_id, 
    lpad(' ', 2*(level-1), ' ')||operation||' '||object_name as desc
  from your_plan_table
  start with parent_id is null 
  connect by prior id = parent_id

这种结构如何更方便?

【讨论】:

  • 是的,它只是一个标准的父子自引用结构。在 Rails 中,我可能会通过 google_visualr gem 使用 Google 的可视化 API 之类的东西——寻找类似的东西。
  • 感谢叶戈尔/大卫。是的,直接查询 PLAN_TABLE 而不是使用 select * from table(dbms_xplan.display); 实际上具有正确的格式。我认为对我来说更容易的是把它放在我自己的 Java 数据结构中,而不是试图找到已经这样做的东西。
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 2012-12-16
  • 1970-01-01
  • 2017-11-05
  • 2013-02-02
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多