标签: materialized-views

是否可以在Oracle中部分刷新物化视图?

我有一个非常复杂的Oracle视图,基于其他物化视图,常规视图以及一些表(我无法"快速刷新"它).大多数情况下,此视图中的现有记录基于日期并且是"稳定的",新记录集具有新日期.

偶尔,我会收到回复日期.我知道那些是什么以及如果我维持一张桌子如何处理它们,但我想保持这个"观点".完全刷新大约需要30分钟,但任何给定日期只需25秒.

我是否可以指定只应更新物化视图的一部分(即受影响的日期)?

我是否必须废弃视图并使用表和过程来填充或刷新该表中的给定日期?

oracle partitioning materialized-views data-warehouse

11
推荐指数
2
解决办法
8158
查看次数

当urderlying表更改时更新物化视图

我有这样定义的物化视图:

CREATE MATERIALIZED VIEW M_FOO
REFRESH COMPLETE ON COMMIT
AS
    SELECT FOO_ID, BAR
    FROM FOO
    WHERE BAR IS NOT NULL
    GROUP BY FOO_ID, BAR
/

COMMENT ON MATERIALIZED VIEW M_FOO IS 'Foo-Bar pairs';
Run Code Online (Sandbox Code Playgroud)

我写的是一种缓存:源表很大但不同对的数量相当小.我需要这些对来让他们与其他表联系起来.到目前为止一切都很好:它绝对可以加速查询

但我想确保视图不包含过时的数据.基础表每月修改四到五次,但我不一定知道何时.我知道可以定义物化视图,以便在源表更改时更新.但是,文档变得相当复杂.

  1. 我需要使用的确切语法是什么?

  2. 我是否需要创建物化视图日志?

  3. 快速刷新和完全刷新之间有什么区别?

oracle materialized-views oracle10g

11
推荐指数
2
解决办法
4万
查看次数

刷新物化视图时,索引是否也会自动刷新?

我目前正在使用Postgres 9.3.3.

如果refresh是物化视图,那个物化视图上的索引是否也重新编制索引?或者索引是否需要手动重新编制索引?

在查看以下问题时,它看起来像它但没有答案,我似乎无法找到任何支持文档.

postgresql indexing materialized-views postgresql-9.3

11
推荐指数
2
解决办法
3714
查看次数

ActiveRecord迁移不填充Postgres物化视图

我有一个MATERIALIZED VIEW通过迁移创建的.

class MyView < ActiveRecord::Migration
  def up
    ActiveRecord::Base.connection.execute <<-SQL
    CREATE MATERIALIZED VIEW my_view AS (
      SELECT DISTINCT something, something_else, other.thing as real_thing, thing.some_id
          FROM some_table
          JOIN another_table on another_table.id = something
          JOIN one_more_table on some_table.id = other_id
          ORDER BY order_column)
      WITH DATA;
    SQL

    add_index :table, [:key_part_one, :key_part_two]
  end

  ...
end
Run Code Online (Sandbox Code Playgroud)

注意:我已经混淆了SELECT语句,只要相信我它的工作原理.

这里要注意的重要部分是我已经明确调用WITH DATA,因此应该立即填充和扫描视图.

这不会发生.迁移运行,如下所示

==  MyView: migrating ========================
==  MyView: migrated (0.0763s) ===============
Run Code Online (Sandbox Code Playgroud)

稍后db:refresh我们会看到以下内容

Reindexing Something...
Reindex queued
Reindexing Another...
Reindex queued
Reindexing …
Run Code Online (Sandbox Code Playgroud)

ruby postgresql activerecord ruby-on-rails materialized-views

11
推荐指数
1
解决办法
748
查看次数

刷新物化视图:并发,事务行为

官方PostgreSQL 9.3文档REFRESH MATERIALIZED VIEW尚未详细描述.

这篇博客的一句话:

Postgres 9.3中的物化视图有一个严重的限制,包括在刷新时使用独占锁.这基本上阻止了在使用来自其父关系的新数据刷新实体化视图时的任何尝试

邮件列表中发布的另一个引用:

如果我理解正确的事情,即使视图已经包含数据,REFRESH MATERIALIZED VIEW也会使用AccessExclusiveLock锁定物化视图.

我的问题:以下序列是否正确:

  1. 查询正在访问实例化视图
  2. 工作执行REFRESH MATERIALIZED VIEW.它会锁定视图,并等待所有使用matview运行的查询完成
  3. matview正在开始刷新; 如果matview上有索引,则会同时更新(因此在一个事务中进行完整刷新)
  4. 使用matview查询等待刷新完成.如果这需要太长时间,则会出现类似"等待锁定超时错误"的情况.
  5. 刷新完成后,锁定将被删除
  6. 已经等待matview的查询继续

postgresql materialized-views postgresql-9.3

10
推荐指数
2
解决办法
4701
查看次数

如何反省物化视图

我有一个实用程序,使用以下内容来检查表的列:

select column_name, data_type from information_schema.columns
        where table_name=%s
Run Code Online (Sandbox Code Playgroud)

如何将其扩展到物化视图的内省列?

postgresql materialized-views information-schema postgresql-9.3

10
推荐指数
1
解决办法
2508
查看次数

提交物化视图时快速刷新

我刚刚创建了表DEPT和EMP,如下所示:

create table DEPT
( dept_no number , dept_name varchar(32) , dept_desc varchar(32),
  CONSTRAINT dept_pk Primary Key (dept_no) );

create table EMP
( emp_no number, dept_no number, CONSTRAINT emp_pk Primary Key (emp_no,dept_no));

insert into dept values (10,'it','desc1');
insert into dept values (20,'hr','desc2');

insert into emp values (1,10);
insert into emp values (2,20);
Run Code Online (Sandbox Code Playgroud)

我使用rowid和物化视图在这些表上创建了物化视图日志,如下所示:

create materialized view log on emp with rowid;
create materialized view log on dept with rowid;

create materialized view empdept_mv refresh fast on commit as
select a.rowid …
Run Code Online (Sandbox Code Playgroud)

oracle materialized-views

10
推荐指数
1
解决办法
2万
查看次数

创建物化视图,每天刷新记录

目前我使用REFRESH ON DEMAND创建的Materialized视图,所以在这种情况下我需要使用以下命令显式刷新MV:

BEGIN DBMS_MVIEW.REFRESH('MV_DATA'); END; 
Run Code Online (Sandbox Code Playgroud)

但是现在我需要每天刷新这个MV,所以任何人都可以帮忙写这个.我已经看到我们可以使用在MV本身中编写显式Job或使用COMPLETE/FAST REFRESH语句来刷新此MV.

提前致谢!

oracle refresh view materialized-views

9
推荐指数
1
解决办法
2万
查看次数

我怎样才能将物化视图作为物化视图pg_dump而不是表格?

我正在尝试将pg_dump(v9.3.4)从一个db和pg_restore转换为另一个(v9.3.6).我有几个物化视图(一些具有索引,一些没有索引).我的一个物化视图被转储为一个表(我已经通过查看pg_dump输出确认了这一点).如何将其作为物化视图转储?

这是我在pg_dump输出中看到的内容:

CREATE TABLE my_mv (
  /* ... */
);

/* ... */

CREATE INDEX my_mv_col_1_idx ON my_mv USING btree (col_1);

/* ... */

CREATE RULE "_RETURN" AS
    ON SELECT TO my_mv DO INSTEAD  WITH tmp_1 AS (

/* ... */
Run Code Online (Sandbox Code Playgroud)

我的其他MV看起来像这样:

CREATE MATERIALIZED VIEW my_good_mv AS
  SELECT /* ... */
WITH NO DATA;

/* ... */

CREATE INDEX my_good_mv_job_col_1_idx ON my_good_mv USING btree (col_1);

/* ... */

REFRESH MATERIALIZED VIEW my_good_mv;
Run Code Online (Sandbox Code Playgroud)

我已经证实这是一个MV:

xxx=# SELECT relkind FROM pg_class WHERE oid …
Run Code Online (Sandbox Code Playgroud)

postgresql pg-dump materialized-views

9
推荐指数
1
解决办法
2610
查看次数

表与物化视图

这与我问的上一个问题有关,带有时间戳表达式的 Saved View,关于在(非物化)视图中存储信息。当用户执行以下操作时,数据将如何存储和检索:

CREATED MATERIALIZED VIEW mv AS SELECT person_id, name, NOW() as now FROM table
# is this more-or-less the same as:
# CREATED TABLE tb AS SELECT person_id, name, NOW() as now FROM table
#  "AND UPDATE EVERY..."
Run Code Online (Sandbox Code Playgroud)

NOW()表达式是否作为值保存到存储中,或者是否在查询时为物化视图评估了任何函数?物化视图是否与表相同,它在存储级别进行了某种优化/刷新,还是我错过了这条船?

这里的这篇文章表明(至少从功能上讲)可以将物化视图模拟为带有触发器的表:https : //www.materialized.info/

sql sql-server oracle postgresql materialized-views

9
推荐指数
1
解决办法
2059
查看次数