我想创建一个当前信息的视图:
CREATE VIEW activeProducts AS SELECT * FROM products WHERE isActive = 1
上述语句创建了查询的快照:
SELECT * FROM products WHERE isActive = 1
因此,如果在运行此查询后更改表'products'中任何项目的状态,则不会在视图中反映出来。我知道这是mysql中CREATE VIEW的功能,是否有用于查看或过滤当前信息的开关或命令?
答案 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。