【问题标题】:Oracle materialized view questionOracle物化视图问题
【发布时间】:2011-11-01 15:12:35
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: oracle materialized-views


    【解决方案1】:

    是的,允许查看“主键实体化视图”:

    主键实体化视图可能包含子查询,以便您可以 在远程物化视图站点创建行的子集

    和“复杂物化视图”

    如果您很少刷新并希望获得更快的查询性能,请使用 方法 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

    【讨论】:

    • 感谢您的链接,所以我会较慢地刷新该视图,但要快select,对吧?
    • 特别感谢您提及新功能(如INTERVAL 分区)。抱歉,不能投票两次 :)
    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2020-04-22
    • 2012-07-17
    相关资源
    最近更新 更多