2011-03-31 65 views
1

一个MySQL视图我想创建的当前信息的视图,例如:如何创建与当前信息

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

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

SELECT * FROM products WHERE isActive = 1 

所以,如果在查询运行后,我更改了表'产品'中的任何项目的状态,但未反映在视图中。我知道这是MySQL中的CREATE VIEW的功能,是否有一个开关或命令,我应该用来查看或过滤当前信息?

回答

2

你正在寻找的东西叫做materialized view

MySQL本身不支持物化视图。

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

0

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

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

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