【问题标题】: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。