Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存在与中的实体化视图性能_Sql_Oracle_Performance_Materialized Views - Fatal编程技术网

Sql 存在与中的实体化视图性能

Sql 存在与中的实体化视图性能,sql,oracle,performance,materialized-views,Sql,Oracle,Performance,Materialized Views,我在谷歌上搜索了一下,没有找到oracle性能问题的明确答案。也许我们可以在这里记录下来。我正在构建一个MV,它非常简单,但是在相当大的表上。像许多事情一样,查询可以用多种方式编写。在我的例子中,当作为select语句编写时,两个解决方案具有相似的成本/执行计划,但当放置在create物化视图中时,执行时间会发生剧烈变化。了解原因吗 表1是大约4000万条记录 表2是大约8M条记录 field1是Tab1上的主键,它在Tab2上不是主键或唯一键,但Tab2在此字段上有索引 字段2不是键,也不在

我在谷歌上搜索了一下,没有找到oracle性能问题的明确答案。也许我们可以在这里记录下来。我正在构建一个MV,它非常简单,但是在相当大的表上。像许多事情一样,查询可以用多种方式编写。在我的例子中,当作为select语句编写时,两个解决方案具有相似的成本/执行计划,但当放置在create物化视图中时,执行时间会发生剧烈变化。了解原因吗

  • 表1是大约4000万条记录
  • 表2是大约8M条记录
  • field1是Tab1上的主键,它在Tab2上不是主键或唯一键,但Tab2在此字段上有索引
  • 字段2不是键,也不在任何一个表(boo)上建立索引
查询如下:

问题1: 问题2: 作为select语句的两个查询在时间上运行类似,explain plan让它们都使用索引扫描,而不是我所期望的完整表扫描。出乎意料的是,当在mv创建中运行时,第二季度的运行速度要快得多(每v$session_longops 47秒,而不是81天),如:

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
);