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

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,我同意即使它确实有效也可能无济于事。)

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

使用 Drupal 视图和主题视图

SQL Server 2008 R2 和索引视图中的执行计划

SharePoint Online 创建和使用视图

您可以使用为带有情节提要的 xib 创建的视图控制器吗?

如何使用复选框创建包含当年月份的列表视图?

Spark SQL 性能调优