Oracle - 编译视图太慢了

时间:2016-02-29 19:53:15

标签: sql oracle view oracle10g

我在oracle中有一个无法编译的视图。视图非常简单,有6个表(5个内部联接),查询结果中不到10000行。

视图的查询类似于以下示例。

CREATE OR REPLACE VIEW owner.X 
as
SELECT vpc.field_1, vpc.field_2
FROM casp.table_0 bpc
INNER JOIN owner.table_1 b
  ON b.id_bpc = bpc.id_bpc
INNER JOIN owner.table_2 a
  ON a.id_b = b.id_b
INNER JOIN owner.table_3 cb
  ON cb.id_a = a.id_cb
INNER JOIN owner.table_4 cbw
  ON cbw.id_cb = cb.id_cb
inner join owner.view_1 vpc
  ON bpc.id_bpc = vpc.id_bpc
WHERE vpc.cod = 1

当我尝试编译时,视图开始处理,但编译永远不会结束。

如果我取消查询并替换我的数据库中不存在的其他表,则服务器花费大约15秒来返回错误ORA-00942(表或视图不存在)。在不同的数据库(开发)中至少是1秒。

我不知道发生这个奇怪错误的服务器发生了什么。

Oracle版本是10G。

1 个答案:

答案 0 :(得分:0)

我在视图性能方面存在类似的问题-从视图中进行选择花费了超过30秒,而基础查询花费了不到1秒。我在寻找一种调整视图的方法,发现了两种:要么不使用视图,要么使用实体化视图。后来我发现this article非常清楚地描述了原因。