标签: materialized-views

MView"启用查询重写"用法

CREATE TABLE TEST_DATE(COL1 VARCHAR2(20),COL2 NUMBER,COL3_DATE DATE,COL4_DATE DATE)
/   

create materialized view TEST_SYS
REFRESH FORCE ON DEMAND
ENABLE QUERY REWRITE  --- ????
AS
SELECT COL1,COL2
FROM    TEST_date
WHERE TRUNC(SYSDATE) BETWEEN TRUNC(COL3_DATE) AND TRUNC(COL4_DATE)
/
Run Code Online (Sandbox Code Playgroud)

如果禁用"启用查询重写"选项,则会为上述查询创建MView,然后在创建实体化视图时使用ENABLE QUERY REWRITE子句的目的是什么,我们是否可以删除它并创建它,我们是否必须在性能上做出妥协MView,如果我们必须注释启用查询重写.

请详细解释我使用enable query rewrite选项.

oracle materialized-views

3
推荐指数
1
解决办法
9245
查看次数

为什么在创建这个简单的物化视图示例时会出现 ORA-12054 错误?

ALTER TABLE RECORDINGS ADD PRIMARY KEY (ID);

CREATE MATERIALIZED VIEW LOG ON RECORDINGS TABLESPACE USERS NOLOGGING;

DROP MATERIALIZED VIEW REC_SEARCH_TEST;
CREATE MATERIALIZED VIEW REC_SEARCH_TEST
REFRESH COMPLETE ON COMMIT
AS (
    SELECT DISTINCT ID, TITLE FROM RECORDINGS
);


ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view
Run Code Online (Sandbox Code Playgroud)

无法理解这里出了什么问题,我知道如果我取出 DISTINCT 子句它就可以工作,但是如果我指定必需的“REFRESH COMPLETE ON COMMIT”,为什么我不能使用“DISTINCT”。

如果我按需使用 DISTINCT 和 REFRESH 没有问题,但这些不是要求。

oracle plsql view materialized-views

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

物化视图上“缺少表”

我有以下实体:

@Entity
@Table(name = "full_address")
public class FullAddress {

  @Id
  @Column(name = "guid")
  private String id;

  @Column(name = "address")
  private String address;

  //getters and setters omitted
}
Run Code Online (Sandbox Code Playgroud)

我还创建了物化视图,如下所示:

CREATE TABLE address_table (
  -- address fields,
  aoid VARCHAR(36),
  CONSTRAINT address_pk PRIMARY KEY (aoid)
);
CREATE MATERIALIZED VIEW full_address AS
  SELECT buildFullAddressById(addrobj.aoid) AS address, addrobj.aoid AS guid FROM address_table AS addrobj;

-- buildFullAddressById is an sql function which is not important here
Run Code Online (Sandbox Code Playgroud)

当我启动 Tomcat 应用程序时,我总是得到

org.hibernate.HibernateException:缺少表:full_address

为什么会发生这种情况?如何修复它?

UPD:看起来像休眠中的错误:https://hibernate.atlassian.net/browse/HHH-9602

java postgresql hibernate jpa materialized-views

3
推荐指数
1
解决办法
3381
查看次数

Oracle中创建包含部分主键的物化视图时无法设置ON COMMIT刷新属性

我需要将作为主键一部分的列的唯一值从表中提取到物化视图中。如果使用“刷新完成”,我可以创建物化视图,但在尝试使用“提交时快速刷新”时却没有运气。谁能指出我是否错过了什么或者Oracle不支持这样的操作。

下面列出了示例输出。谢谢。

SQL> create table TEST( col1 number, col2 number, col3 varchar(32), CONSTRAINT test_pk Primary Key (col1, col2));

Table created.

SQL> create materialized view test_mv build immediate refresh fast on commit as select distinct col2 from test;
create materialized view test_mv build immediate refresh fast on commit as select distinct col2 from test
                                                                                                     *
ERROR at line 1:
ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view


SQL> create materialized view test_mv build immediate refresh complete as …
Run Code Online (Sandbox Code Playgroud)

oracle materialized-views primary-key

3
推荐指数
1
解决办法
9740
查看次数

是否可以更改物化视图中的列类型?

我很确定这不是:

ALTER MATERIALIZED VIEW myview ALTER COLUMN quantity SET TYPE integer;
Run Code Online (Sandbox Code Playgroud)

产生:

ERROR:  "myview" is not a table, composite type, or foreign table
Run Code Online (Sandbox Code Playgroud)

但只是想检查一下我没有错过文档中的某些内容

postgresql materialized-views

3
推荐指数
1
解决办法
2376
查看次数

经常更新的最佳缓存策略数据(Redis/Memcached vs Nginx/Varnish vs Materialized view)

我目前正在运行一个 AWS EC2 Ubuntu 服务器,它从 Postgres RDS 数据库实例中获取数据。在特定页面的视图函数中使用的 SQL 查询之一有很多连接并且运行速度很慢。我试图减少查询并删除一些可能有点不必要的连接,但它仍然需要比预期更长的加载时间(至少 6 秒)。我目前正在研究潜在的缓存策略,以帮助加快页面服务的速度。

我曾考虑使用物化视图,但是原始视图函数获取的数据平均每 30 秒更新一次,我担心实现触发器或常规 cron 作业来刷新 MatView 这通常会对其造成影响数据库,并且可能不是定期更新和更改数据的最佳策略(除非有人可以建议另一种更新 MatView 中行的方法,该方法不涉及运行与原始查询非常相似的查询)

到目前为止,我已经在 Elasticache 实例上测试了 Redis,并对其工作方式印象深刻,但是我也被推荐查看 Nginx 和 Varnish 缓存策略。

我有点困惑哪种缓存策略最适合这种情况。与 EC2 实例上的 Nginx/Varnish 实现相比,Elasticache 实例上的 Redis/Memcached 是否有点过于重量级?尝试缓存在 Nginx 缓存上经常更改的数据是否被认为是一个坏主意?

postgresql nginx materialized-views amazon-web-services redis

3
推荐指数
1
解决办法
2528
查看次数

为什么 ScyllaDB MV 已准备好生产,而 Cassandra MV 仍处于试验阶段,不建议使用?

Cassandra 的 MV 尚未准备就绪:

  1. Cassandra 物化视图影响
  2. 限制:https : //docs.datastax.com/en/cql-oss/3.3/cql/cql_using/knownLimitationsMV.html
  3. https://techblog.fexcofts.c​​om/2018/05/08/cassandra-materialized-views-ready-for-production/

事实证明,MV 存在问题。最大的问题是 MV 与基表不同步。使用不是基表键的键创建 MV 时似乎会发生这种情况。Cassandra 不提供任何机制来检查基表和任何 MV 之间的完整性。因此,除非您手动执行此操作,否则您将不会注意到任何差异。如果您确实发现了任何差异,解决它们的唯一方法是删除并重新创建 MV。

Cassandra 从 2015 年开始有 MV,已经 5.5 年了:https : //www.datastax.com/blog/new-cassandra-30-materialized-views

转到 ScyllaDB,这是 2016 年发布的第一个版本的数据库:https ://www.scylladb.com/2016/03/31/release-1-0/ 。ScyllaDB 将 MV 提升为生产就绪。

为什么 Cassandra 不能像 ScyllaDB 那样创建生产就绪的 MV?我在他们的网站上看不到 ScyllaDB 上 MV 的任何限制。MV 非常有用,我不明白 Cassandra 从未成功生产就绪 MV,这个问题已经开放了 5 年多:https : //issues.apache.org/jira/browse/CASSANDRA-10346

ScyllaDB是如何解决MV不一致问题的?为什么 Cassandra 不能/没有解决 MV 问题?

materialized-views cassandra scylla

3
推荐指数
1
解决办法
210
查看次数

使用Clickhouse获取物化视图的内表名称

我有几个尚未使用To [db]语句创建的表和物化视图,并且有一个具有以下名称的内部表:

\n
\xe2\x94\x82 .inner_id.27e007b7-d831-4bea-8610-b3f0fd1ee018 \xe2\x94\x82\n\xe2\x94\x82 .inner_id.3e27a1eb-f40f-4c6d-bc70-7722f2cc953b \xe2\x94\x82\n\xe2\x94\x82 .inner_id.53c0fe00-151a-4bb5-ba61-237da8c1c6f2 \xe2\x94\x82\n\xe2\x94\x82 .inner_id.7785fe45-94e0-42ee-8c0e-14f2d74e3c88 \xe2\x94\x82\n\xe2\x94\x82 .inner_id.7d7e6485-e18e-47e0-9bb6-51a31a8cafd0 \xe2\x94\x82\n\xe2\x94\x82 .inner_id.cd920d50-7469-4507-a5cf-244de054b037 \xe2\x94\x82\n\xe2\x94\x82 .inner_id.fe6d3ce5-7ffc-4bca-9d6b-4015b1807e4f \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n

这与我用来创建它们的物化视图的名称不同。

\n

有没有办法通过 clickhouse 查询获取物化视图的内表名称?

\n

materialized-views clickhouse

3
推荐指数
1
解决办法
1527
查看次数

为什么不建议在Oracle中使用直接参考物化视图?

引自Oracle在线文档

与索引不同,可以使用SELECT语句直接访问实例化视图.但是,建议您尝试避免编写直接引用实例化视图的SQL语句,因为在不影响应用程序的情况下很难更改它们.相反,让查询重写透明地重写您的查询以使用物化视图.

我不太明白direct reference materialized view在上下文中究竟是什么意思,听起来好像SELECT声明没关系,但是不推荐使用外键加入物化视图和订单表/视图,甚至select不建议使用它?为什么?

sql oracle view materialized-views

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

具有主键的Oracle物化视图

我在下面创建了Oracle物化视图:

CREATE MATERIALIZED VIEW MyMV
REFRESH COMPLETE ON DEMAND
AS

SELECT t1.*
  FROM table1 t1, table2 t2 where t1.id=t2.id;
Run Code Online (Sandbox Code Playgroud)

table1有一个主键,并且成功创建了MV,但未在物化视图表中创建主键。

还有其他用主键创建MV的方法吗?

oracle materialized-views primary-key

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