4

我有一个表格,其中包含有关不同事件的信息,例如

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

我意识到 90% 的查询只访问今天的事件;较旧的行被存储用于历史记录,并最终移动到存档表中。
但是,事件表仍然很大,我想知道我是否可以通过创建一个物化视图来提高性能,该视图具有类似的东西WHERE event_date = trunc(sysdate),也许是索引event_date?是否允许?

谢谢

4

1 回答 1

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

试试看Oracle是否接受它的REFRESH FAST条款。

编辑 - 另一种选择:

根据您的 DB 版本(企业 + 分区)和版本 (11gR2),您可以使用称为 INTERVAL 分区的新 Oracle 功能在现有表中定义“每日分区”。这样,您的大多数查询都会变得更快,而无需有效地复制数据 - 请参阅http://www.oracle.com/technetwork/database/options/partitioning/twp-partitioning-11gr2-2009-09-130569.pdf

于 2011-08-23T03:56:04.783 回答