1

我想创建一个当前信息的视图,如下所示:

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

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

SELECT * FROM products WHERE isActive = 1

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

4

2 回答 2

2

您正在寻找的东西称为物化视图

MySQL 本身并不支持物化视图。

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

于 2011-03-31T20:47:43.347 回答
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;

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

如果您想研究可以快速刷新的“可增量刷新的物化视图”,请查看此博客文章

于 2011-04-06T17:02:02.760 回答