如何使用当前信息创建mysql视图

时间:2011-03-31 19:18:46

标签: php mysql view materialized-views

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

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

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

SELECT * FROM products WHERE isActive = 1

因此,如果在运行此查询后更改表'products'中任何项目的状态,则不会在视图中反映出来。我知道这是mysql中CREATE VIEW的功能,是否有用于查看或过滤当前信息的开关或命令?

2 个答案:

答案 0 :(得分:2)

您正在寻找的东西称为materialized view

MySQL本身不支持物化视图。

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

答案 1 :(得分:0)

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

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