【问题标题】:How to create a mysql view with current information如何使用当前信息创建 mysql 视图
【发布时间】:2011-07-27 04:19:27
【问题描述】:

我想创建一个当前信息的视图:

CREATE VIEW activeProducts AS SELECT * FROM products WHERE isActive = 1

上面的语句创建了查询的快照:

SELECT * FROM products WHERE isActive = 1

因此,如果我在运行此查询后更改表“产品”中的任何项目的状态,它不会反映在视图中。我知道这是 mysql 中 CREATE VIEW 的功能,有没有我应该用来查看或过滤当前信息的开关或命令?

【问题讨论】:

    标签: php mysql view materialized-views


    【解决方案1】:

    您要查找的内容称为materialized view

    MySQL 本身不支持物化视图。

    有一些解决方法,但最简单直接(如果性能不佳)是使用CREATE TABLE ... AS SELECT ... 而不是创建视图。这会重复数据,如果数据很多,可能会很慢。此外,我认为它不会创建任何索引,因此您可能需要稍后进行清理。

    【讨论】:

      【解决方案2】:

      您想要的是“物化视图”,也称为快照。

      Charles 提出了拍摄快照的最简单方法,但正如他所建议的那样,它不会有索引。如果您希望快照包含相同的索引,您可以使用:

      create table if not exists snapshot_table like regular_table;
      begin; 
        delete from snapshot_table; 
        insert into snapshot_table select * from regular_table where isActive = 1;
      commit;
      

      话虽如此,如果表很大,或者您想使用连接或聚合,那么更新视图可能会非常昂贵。

      如果您想研究可以快速刷新的“可增量刷新的物化视图”,请查看this blog post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        • 2023-03-27
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        • 2014-09-20
        相关资源
        最近更新 更多