使用创建视图和解释计划的问题
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
,我同意即使它确实有效也可能无济于事。)以上是关于使用创建视图和解释计划的问题的主要内容,如果未能解决你的问题,请参考以下文章