标签: materialized-view

为什么删除 MVIEW 会触发完全刷新?

我刚刚在 Oracle 中创建了一个物化视图,但意识到我使用了错误的脚本,所以我想再次删除 MVIEW。

MVIEW 是用这样的语句创建的:

create materialized view foobar
  refresh start with trunc(sysdate) + 1/8  next sysdate + interval '8' hour
as
select ...
from ...;
Run Code Online (Sandbox Code Playgroud)

创作花了一些时间。

现在在意识到这是我运行的错误脚本之后:

drop materialized view foobar;
Run Code Online (Sandbox Code Playgroud)

这也运行了一段时间。我首先认为这可能是由于某些锁定或其他会话阻止了这一点,但不是:当我查询时,v$session我看到我的drop语句实际上触发了 mview 的完全刷新:

用户名 | SID | 序列号 | 节目 | 状态 | SQL_ID | SQL_TEXT
----------+------+---------+-------------- ----+--------+---------------+------------ -------------------------------------------------- ---
我的用户 | 第294话 29131 | oracle@hostname (J002) | 活跃 | 6snjgrzbtynyc | INSERT /*+ BYPASS_RECURSIVE_CHECK */ INTO "MY_USER"."FOOBAR" select .....

事实上,drop materialized …

oracle materialized-view ddl

5
推荐指数
1
解决办法
941
查看次数

需要 ODBC 连接到 postgresql 以包含物化视图

我有一个 Access 前端用户界面,它使用最新的 ODBC 驱动程序链接到 postgreSQL 数据库中的表。我可以链接到 postgreSQL 表和视图,但无法访问物化视图。

该线程描述了驱动程序的补丁以包含物化视图。有谁知道这个补丁是否包含在最新的驱动程序中?如果没有,我将如何应用它?如果包含,需要选择哪些选项才能从 MS Access 访问物化视图?

ms-access odbc materialized-view postgresql-9.4

5
推荐指数
1
解决办法
587
查看次数

索引视图会减慢更新速度。有解决方法的提示吗?

我尝试创建索引视图。我终于有了一个(几乎)符合标准的案例。所有内部联接、极少数非确定性函数(已移至外部视图)和自联接仅位于移至外部视图的两个表中。

问题是仅视图就需要 3 秒以上的时间来编译,这对于用例来说太慢了。遵循这样的建议:

索引视图也是提高 INNER JOINS 性能的好方法。当两个或多个表在索引视图中预联接时,查询优化器可以选择检索物化视图数据,而不是执行昂贵的联接操作。

我正在考虑用索引视图解决问题。

然而,一旦创建了这个索引视图(它包含大约 20 个连接),对基础表的每次更新都会变得非常慢。设置统计 IO On 显示它正在重新访问语句上的所有基础表,这些表在重新评估视图时甚至不修改任何数据,例如如下所示的更新:

update a
  set y = b.y, z = b.z
from a inner join b on a.x = b.x
where exists (select a.x, a.y, a.z except select b.x, b.y, b.z)
Run Code Online (Sandbox Code Playgroud)

因此,受影响的行数为零,但整个索引视图及其依赖项仍然会执行一系列操作,并且执行时间会显示这一点。

有没有办法让 SQL Server 不使用该视图,除非它确实需要更新记录?也许有我不知道的暗示。

sql-server materialized-view sql-server-2016

5
推荐指数
0
解决办法
732
查看次数

使用 NOEXPAND 更新索引视图

我先说这是来自 Stack Overflow 上一个未回答问题的交叉帖子
我这样做并不是为了获得对这个问题的更多看法,我希望 DBA 社区分享他们对这是否可能是 SQL Server 中的错误的看法。我认为 SO 社区没有专业知识来决定这一点,所以我在这里重新发布。


假设我有一个 table T,并且我有一个索引视图V

CREATE TABLE dbo.T (id int PRIMARY KEY, b bit NOT NULL, txt varchar(20));
GO
CREATE VIEW dbo.V
WITH SCHEMABINDING AS
  SELECT T.Id, T.txt
  FROM dbo.T AS T
  WHERE T.b = 1;
GO
CREATE UNIQUE CLUSTERED INDEX idx_V ON dbo.V (Id);
Run Code Online (Sandbox Code Playgroud)

在这个简单的例子中,它基本上只是一个过滤索引,但它也可以有连接等。

我现在想在Twhere 中选择一些行,这里b = 1的过滤视图非常有用,我在标准上所以必须使用NOEXPAND(或者它对于视图匹配来说太复杂了):

SELECT Id, txt
FROM V WITH (NOEXPAND);
Run Code Online (Sandbox Code Playgroud)

这很好用。

现在我想将这些行更新为某个值。该视图符合可更新条件,因此我可以执行以下操作: …

sql-server t-sql materialized-view update

5
推荐指数
1
解决办法
211
查看次数

在 Oracle 中使用 INDEX 提示

我有一个相当复杂的查询。我写了两个不同的查询来实现我的目标。第一个是使用 WITH,另一个是使用全局临时表。

第一:

WITH A
(
 KNO 
 ..
 )
 , B
 (
 KNO
 ...
 )
 , C
 (
 KNO
 ...
 )
 SELECT * from 
 A INNER JOIN B 
 on A.KNO = B.KNO
 INNER JOIN C
 on B.KNO = C.KNO
Run Code Online (Sandbox Code Playgroud)

第二个:

Truncate Table tempA;
Truncate Table tempB;
Truncate Table tempC;

INSERT INTO tempA SELECT -- Same select which constructs WITH A
INSERT INTO tempB SELECT -- Same select which constructs WITH B
INSERT INTO tempC SELECT -- Same select which constructs …
Run Code Online (Sandbox Code Playgroud)

index oracle materialized-view

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

过去 24 小时内的物化视图

我正在收集具有关联时间戳的空间点数据。我想创建过去 24 小时内这些数据的视图。因为我是通过 ArcGIS 服务器管道这些空间数据,所以存在与在直视图中管道相关的性能问题(该视图可以轻松包含 100-200k+ 点)。长话短说,为了缓解这些性能问题,我创建了数据的物化视图。但是,我希望此数据每 3 - 4 分钟更新一次。

我的问题是,当我将 current_timestamp 添加到查询时:

SELECT * 
FROM points 
WHERE timestamp > current_timestamp - interval '24' hour
Run Code Online (Sandbox Code Playgroud)

...这不再可以用作快速刷新。有什么办法可以纠正这个问题,还是总是完全刷新?如果显示,在更新物化视图的性能方面我应该注意什么(同样,这个数据集很容易达到 100-200k 点,每秒添加 3-6 个点)。

oracle materialized-view

4
推荐指数
1
解决办法
2649
查看次数

postgres 物化视图和索引以提高总体性能

我有一个大表,其中包含许多用于预计算聚合的物化视图。新数据每天仅插入一次,因此可以将其视为数据仓库类型系统。

显然,当我查询我的主(非聚合)表时,规划器会使用它认为合适的任何索引。这是否扩展到物化视图?如果我查询主表并且查询涉及聚合,它是否识别出我的物化视图已经具有它需要的值?

postgresql performance index materialized-view

4
推荐指数
1
解决办法
3232
查看次数

在相关事务后触发一次更新物化视图?

我正在使用 PostgreSQL 9.6。

我有一个物化视图来支持跨两个表的全文搜索,我将其称为poststags。这些表格很少更新和频繁搜索。

我试图找到一个好的策略来运行REFRESH MATERIALIZED VIEW post_search.

理想的解决方案会是这样的触发器:在任何交易修饰的(或之后)的端部poststags和/或posts_tags(连接表),刷新物化视图正好一次

我怎么能做到这一点?

postgresql materialized-view fast-refresh postgresql-9.6

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

Postgres 实体化视图的大小急剧增加

我有一个生产 postgres 10 数据库。每小时我都会在物化视图上运行“同时刷新物化视图”以重新计算值;每天只添加几个新行。

所有物化视图(及其索引)的大小都在急剧增加。应该是 102 MB 的视图现在是 1700 MB,并且指数也遭受了类似的通货膨胀。并且刷新时间从17秒增加到10分钟。由于视图及其索引的增长,整个数据库大小在最后一天从 4 GB 增长到 21 GB。我无法进行非并发刷新,因为这些视图不断被读取。

运行刷新会触发大量磁盘 I/O。

我不知道是什么导致了这个问题。我启用并配置了 autovacuum。我有 8GB 的​​内存,work_mem 设置为 256 MB。

postgresql materialized-view

4
推荐指数
1
解决办法
3039
查看次数

有没有办法禁用视图索引的日志记录/备份?

我们有一个 SQL Server 数据库,它使用索引视图来有效查询一些定期更改的数据(是的,我知道数据更改时维护索引会产生成本,但在我们的情况下这是非常值得的)。

我的理解是,对视图索引的更改必须像对任何其他表/索引的更改一样进行记录/备份。然而,在我看来,这种日志记录是多余的,因为在发生崩溃时 SQL 可以轻松地从视图定义重建视图索引。

有什么办法可以用 SQL Server 来实现这样的事情吗?

index sql-server backup materialized-view sql-server-2016

4
推荐指数
1
解决办法
469
查看次数