Sql 存在与中的实体化视图性能
我在谷歌上搜索了一下,没有找到oracle性能问题的明确答案。也许我们可以在这里记录下来。我正在构建一个MV,它非常简单,但是在相当大的表上。像许多事情一样,查询可以用多种方式编写。在我的例子中,当作为select语句编写时,两个解决方案具有相似的成本/执行计划,但当放置在create物化视图中时,执行时间会发生剧烈变化。了解原因吗Sql 存在与中的实体化视图性能,sql,oracle,performance,materialized-views,Sql,Oracle,Performance,Materialized Views,我在谷歌上搜索了一下,没有找到oracle性能问题的明确答案。也许我们可以在这里记录下来。我正在构建一个MV,它非常简单,但是在相当大的表上。像许多事情一样,查询可以用多种方式编写。在我的例子中,当作为select语句编写时,两个解决方案具有相似的成本/执行计划,但当放置在create物化视图中时,执行时间会发生剧烈变化。了解原因吗 表1是大约4000万条记录 表2是大约8M条记录 field1是Tab1上的主键,它在Tab2上不是主键或唯一键,但Tab2在此字段上有索引 字段2不是键,也不在
- 表1是大约4000万条记录李>
- 表2是大约8M条记录
- field1是Tab1上的主键,它在Tab2上不是主键或唯一键,但Tab2在此字段上有索引李>
- 字段2不是键,也不在任何一个表(boo)上建立索引
CREATE MATERIALIZED VIEW SCHEMA1.mv_blah as
(
Q1 or Q2
);
是否有人有任何见解,如果可能,这里是否有一条规则不用于mviews?我知道in和exist之间的诀窍,当表之间不存在索引时,但这一点让我感到困惑。这是针对oracle 11g数据库运行的 这看起来像是一个已知的bug。如果您有权访问“我的Oracle支持”,请查看,如果您没有,请查看
当然,这里不能复制MOS版本的内容,但可以说,唯一的解决办法是您正在使用的
不存在。它在12c中是固定的,这对您没有多大帮助。您可以发布Q1和Q2的物化视图创建的执行计划吗?在11g中,使用SQL developer,您无法让oracle在MV中显示执行计划,就像选择一样。这非常好。显然,现在我们只需要写一个不存在的,但知道有一个悬而未决的修复,我们基本上可以让人们知道oracle 11g和更低版本这是一件应该有帮助的事情。我想知道为什么第一篇文章没有出现在我的搜索,但无论如何,我感谢你知道并找到它。我将不得不向DBA抱怨升级整个数据库以修复我的一个查询:)另外需要注意的是,MV定义中使用的查询仅在MV创建期间显式使用。Oracle可能会在刷新过程中自动重写它,添加提示或更改周围的其他内容,但无法控制它。@pmdba-在创建过程中当然也是这样(因为该错误是创建和刷新的);事实上,在某种程度上,对于所有其他的查询?
SELECT
CR1.Several_Fields
FROM
SCHEMA1.tab1 T1
WHERE T1.field2 like 'EXAMPLE%'
AND not exists (
SELECT 1
FROM SCHEMA1.tab2 T2
WHERE T1.field1 = T2.field1
)
;
CREATE MATERIALIZED VIEW SCHEMA1.mv_blah as
(
Q1 or Q2
);