例如,我有一个表,其中包含有关不同事件的信息
CREATE TABLE events (
id int not null primary key,
event_date date, ...
)
我意识到 90% 的查询仅访问今天的事件;较旧的行将被存储以供历史记录并最终移动到存档表中。
但是,事件表仍然很大,我想知道是否可以通过创建具有类似内容的物化视图来提高性能WHERE event_date = trunc(sysdate)
也许索引event_date
?到底允许吗?
Thanks
是的,这是允许的,请参阅“主键物化视图”:
主键物化视图可能包含子查询,以便您可以
在远程物化视图站点创建行的子集
和“复杂物化视图”
如果您很少刷新并且想要更快的查询性能,那么使用
方法A(复杂物化视图)。
如果定期刷新并且会牺牲查询性能,则使用方法 B(简单物化视图)。
at http://download.oracle.com/docs/cd/B10500_01/server.920/a96567/repmview.htm http://download.oracle.com/docs/cd/B10500_01/server.920/a96567/repmview.htm
在您的示例中,恕我直言,这很可能不是“复杂的物化视图”:
CREATE MATERIALIZED VIEW events_today REFRESH FAST AS
SELECT * FROM EVENT WHERE event_date = trunc(sysdate);
只需尝试一下,看看 Oracle 是否接受它REFRESH FAST
clause.
编辑-另一个选择:
根据您的数据库版本(企业版 + 分区)和版本 (11gR2),您可以使用名为 INTERVAL 分区的新 Oracle 功能来定义现有表中的“每日分区”。这样,您的大多数查询都会变得更快,而无需有效地复制数据 - 请参阅http://www.oracle.com/technetwork/database/options/partitioning/twp-partitioning-11gr2-2009-09-130569.pdf http://www.oracle.com/technetwork/database/options/partitioning/twp-partitioning-11gr2-2009-09-130569.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)