使用创建视图和解释计划的问题

Posted

技术标签:

【中文标题】使用创建视图和解释计划的问题【英文标题】:Problem using create view and explain plan 【发布时间】:2021-04-10 11:30:57 【问题描述】:

我想使用 explain plan for 来测试这个查询的效率。

EXPLAIN PLAN FOR
(CREATE VIEW TOPTEAM AS  
    SELECT T1.Team TEAMS, COUNT(*) TIMES 
    FROM TeamsDivision T1
    WHERE (P1.Division = 1 AND
          (2 = (SELECT T2.Division
                FROM TeamsDivision T2
                WHERE (T2.Team = T1.Team AND T2.Season = (T1.Season + 1) )))
    )
    GROUP BY T1.Team     
    ORDER BY TIMES DESC;

SELECT TEAMS, TIMES 
FROM  TOPTEAM
WHERE ROWNUM < 6;

DROP VIEW TOPTEAM);

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

查询在没有解释计划的情况下工作,但是当我使用它时,我得到了这个错误:

CREATE VIEW TOPTEAM AS
 *
ERROR at line 2:
ORA-00928: missing SELECT keyword


FROM  TOPTEAM
      *
ERROR at line2:
ORA-00942: table or view does not exist

我在没有创建视图的情况下对查询使用了解释计划,并且它们起作用了。我不知道是什么导致了我尝试更改括号的错误,但我得到了同样的错误。唯一有效的时候是我将解释计划放在SELECT TEAMS, TIMES 之前。谢谢!

【问题讨论】:

【参考方案1】:

EXPLAIN PLAN 的文档说

EXPLAIN PLAN 语句显示优化器的执行计划 选择 SELECT、UPDATE、INSERT 和 DELETE 语句。

来源:SQL Tuning Guide

你大概可以捞出CREATE VIEW语句的执行计划,但是会无趣。只检查查询的语法,您对表的访问,查询将存储在USER_VIEWS

我猜你想知道的是查询本身的性能。你会这样做

EXPLAIN PLAN FOR
SELECT TEAMS, TIMES 
  FROM TOPTEAM
 WHERE ROWNUM < 6;

【讨论】:

我很高兴听到这个消息,但这不是 *** 的必要或约定。但是,您可以选择接受一个答案,以便其他人知道它解决了您的问题:***.com/help/someone-answers SQL 调优指南在这里并不完全准确 - EXPLAIN PLAN 可以使用 一些 DDL 语句。例如,在this answer 中,我使用EXPLAIN PLAN 来生成建立索引所需时间的估计值。 (但它不适用于CREATE VIEW,我同意即使它确实有效也可能无济于事。)

以上是关于使用创建视图和解释计划的问题的主要内容,如果未能解决你的问题,请参考以下文章