是否可以在SQLServer 2008中为主视图设置主键?
可以使用Oracle Materialized视图来连接具有外键的多个相关表,以创建更大的非规范化大表,并立即刷新吗?
在一些调查中,它表示在使用快速刷新时不允许连接.
我的假设是错误的,我可以用Oracle Materalized视图做这种事情吗?
我们遇到了一个问题,即物化视图没有刷新,并且出现编译错误.其中一位资深开发人员说,他只是想办法解决这个问题 - 告诉toad编译物化视图.
所以我的问题很简单:刷新和"编译"之间的区别是什么?
我在Oracle中有一个包含LEFT JOIN的物化视图,需要很长时间才能更新.当我更新基础表时,运行需要63914.765秒(是的,这几乎是17个小时).
我在同一个表上使用LEFT JOIN,因为我想将数据从行转移到列.此Oracle版本中不提供pivot命令,并且在FAST REFRESH物化视图上不允许使用GROUP BY + CASE.
物化视图日志如下所示:
CREATE MATERIALIZED VIEW LOG ON Programmes_Titles
WITH PRIMARY KEY, rowid
INCLUDING NEW Values;
Run Code Online (Sandbox Code Playgroud)
Materialized View本身看起来像这样(它包含700000行,Programmes_Titles表包含900000行):
CREATE MATERIALIZED VIEW Mv_Web_Programmes
REFRESH FAST ON COMMIT
AS
SELECT
t1.ProgrammeId,
t1.Title as MainTitle,
t2.Title as SecondaryTitle,
--Primary key
t1.Title_Id as t1_titleId,
t2.Title_Id as t2_titleId,
t1.rowid as t1_rowid,
t2.rowid as t2_rowid
FROM
Programmes_Titles t1,
Programmes_Titles t2
WHERE
t1.Titles_Group_Type = 'mainTitle'
AND t1.Programme_Id = t2.Programme_Id(+) AND t2.Titles_Group_Type(+) = 'secondaryTitle'
Run Code Online (Sandbox Code Playgroud)
我使用的UPDATE语句是这样的:
UPDATE Programmes_Titles
SET Title = 'New title' …Run Code Online (Sandbox Code Playgroud) table products
id primary_key
table transactions
product_id foreign_key references products
Run Code Online (Sandbox Code Playgroud)
下面的SQL查询非常慢:
SELECT products.*
FROM products
LEFT JOIN transactions
ON ( products.id = transactions.product_id )
WHERE transactions.product_id IS NULL;
Run Code Online (Sandbox Code Playgroud)
在1亿个产品记录中,可能只有100条记录中没有相应交易的产品。
该查询非常慢,因为我怀疑它正在进行全表扫描以查找那些空外键产品记录。
我想创建这样的部分索引:
CREATE INDEX products_with_no_transactions_index
ON (Left JOIN TABLE
BETWEEN products AND transactions)
WHERE transactions.product_id IS NULL;
Run Code Online (Sandbox Code Playgroud)
以上可能吗,我将如何处理?
注意:此数据集的一些特征:
交易永远不会被删除,只会被添加。
产品永远不会被删除,而是以每分钟100s的速度添加(显然,这是一个复杂得多的实际用例背后的虚构示例)。其中的一小部分是暂时孤立的
我需要经常查询(每分钟最多一次),并且需要始终知道当前的一组孤立产品是什么
sql postgresql indexing materialized-views postgresql-performance
Oracle Materialized视图中是否有一种方法可以在物化视图中使用的表发生更改时自动刷新?我应该使用什么是刷新模式和刷新方法?我应该使用Sql Developer使用哪些选项?
先感谢您
我将物化视图设置为REFRESH FAST ON COMMIT.源表中有4个BLOB列,我将转换为VARCHAR2作为MV的一部分:
CREATE MATERIALIZED VIEW Employee_MV
REFRESH FAST ON COMMIT
WITH PRIMARY KEY
AS
SELECT UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR (History, 2000, 1)), //BLOB column
<3 more blob columns with similar conversions>,
<misc columns from different tables>,
<rowid columns for tables for REFRESH FAST to work>
FROM <list of tables with JOINs>
Run Code Online (Sandbox Code Playgroud)
如果在使用BLOB列的参与表中插入行时刷新MV - 无论是通过ON COMMIT还是ON DEMAND - 它会出现以下消息错误:
ORA-12008: error in materialized view refresh path
ORA-06553: PLS-307: too many declarations of 'SUBSTR' match this call
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2545
ORA-06512: …Run Code Online (Sandbox Code Playgroud) 我实现了表中视图的结果.我想知道他们是否有办法知道此视图的结果何时更改以刷新它.物化视图和结果缓存可以做到这一点,但我不想使用这两种技术.他们是另一种回答这个问题的方法吗?
实际上,我们有一个通用系统,每隔n分钟实现并刷新一次视图.刷新的成本可能很高,我试图知道我们是否可以知道基础数据是否有变化.
我们不使用物化视图,因为完全刷新会截断表,并且只在具有主键的表上快速刷新.
结果缓存无法完成工作,因为我们没有足够的内存.
所以我想知道我们是否可以使用一种技术来了解自上次刷新以来视图的基础数据是否发生了变化
如何将对象映射到物化视图并保持<prop key="hibernate.hbm2ddl.auto">validate</prop>?
启动webapp时,我在启动时遇到此异常:
Caused by: org.hibernate.HibernateException: Missing table: subjects_lp
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1302)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:512)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1797)
...
根据消息来源,看起来hibernate只询问DatabaseMetadata#getTableMetadata中的类型"VIEW"和"TABLE",而postgresql将其存储为"MATERIALIZED VIEW"(使用普通的jdbc检查).
令人惊讶的是,我无法在谷歌中找到有关此错误的一些信息.有没有办法在启动时保持hibernate验证,也许有办法保持一个表/实体未经验证?
Hibernate版本:4.2.12.Final
Postgresql驱动程序:9.3-1101-jdbc41
实体仅具有任何特定注释
@javax.persistence.Entity
@javax.persistence.Table(name = "table_name", schema = "schema")
我想获得Oracle中物化视图日志的列表.我怎样才能做到这一点?我以为这会给我一个清单:
select * from USER_BASE_TABLE_MVIEWS;
Run Code Online (Sandbox Code Playgroud)
删除实例化视图日志并使用与此类似的脚本重新创建时:
CREATE MATERIALIZED VIEW LOG ON "XXX"."STATUSES_AUD"
PCTFREE 10 PCTUSED 30 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 ....
Run Code Online (Sandbox Code Playgroud)
运行此查询时,它不会显示:
select * from USER_BASE_TABLE_MVIEWS;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?