Oracle SQL-子查询工作正常,但是带有该子查询的创建表似乎挂起

问题描述 投票:0回答:2

我具有以下查询结构

CREATE TABLE <Table Name> AS 
(
   SELECT .... FROM ...
) 

当我自己运行SELECT语句时,它将在几秒钟内编译并返回结果。但是,当我使用CREATE Table语句运行该语句时,它要花几个小时才能达到我认为它已挂起并且永远不会编译的程度。

这是什么原因?以及如何解决?

  • Oracle数据库12c <12.1.0.2.0>
sql database oracle oracle-sqldeveloper oracle12c
2个回答
2
投票

[如果您在某个GUI中运行了SELECT,请注意,其中大多数(如果不是全部)仅返回几百行,而不是整个结果集。例如:如果您的查询确实返回了2000万行,则GUI显示前50行(或500,取决于您使用的工具),这有点令人困惑-就像让您感到困惑一样。

例如,如果您将当前查询用作内联视图,则>

select count(*)
from 
(select ... from ...)   --> this is your current query

它将“强制” Oracle提取所有行,因此您会看到它实际需要多长时间。

除此之外,例如是否可以优化SELECT

  • 查看WHERE子句中使用的列是否已索引
  • 收集所有相关表的统计信息(在FROM子句中使用)
  • 删除ORDER BY子句(如果有的话;它与CTAS操作无关)
  • 检查说明计划
  • 性能调优远远超出了我的建议;这些只是您可能要看的一些建议。

请提供您的完整查询/声明,以便获得更多信息。

它可能包含不寻常的东西。例如。您有任何集合或嵌套表吗?


0
投票

请提供您的完整查询/声明,以便获得更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.