2011-08-23 111 views
4

我有持有对不同事件的信息,例如甲骨文物化视图的问题

CREATE TABLE events (
    id int not null primary key, 
    event_date date, ... 
) 

我意识到,90%的所有查询的访问才有了今天的活动表;较旧的行将存储为历史记录并最终移至归档表。
但是,事件表仍然很大,我不知道是否可以通过创建具有类似WHERE event_date = trunc(sysdate)的物化视图以及可能在event_date上的索引来提高性能?它是否允许?

感谢

回答

4

是的,这是允许看到“主键物化视图”:

主键物化视图可以包含一个子查询,这样就可以 远程在创建行的子集物化视图网站

和 “复杂的物化视图”

如果您很少刷新并且想要更快的查询性能,请使用方法A(复杂物化视图) 。
如果定期刷新并且可以牺牲查询性能,则使用方法B(简单物化视图)。

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); 

只是尝试一下,看看如果甲骨文与REFRESH FAST接受它条款。

编辑 - 另一种选择:

根据您的DB版(Enterprise +分区)和版本(11gR2的),你可以使用一个称为间隔分区新的Oracle功能将现有中定义“每日分区”表。通过这种方式,大多数查询得到的速度很快,但没有有效地复制数据 - 请参阅http://www.oracle.com/technetwork/database/options/partitioning/twp-partitioning-11gr2-2009-09-130569.pdf

+0

感谢您的链接,所以我将对该视图进行较慢的刷新,但快速选择对吧? – a1ex07

+0

恩,我没有看到你的更新答案。再次感谢。 – a1ex07

+0

欢迎您,仍在编辑 - HTH :-) – Yahia