如何用MySQL实现物化视图?

Gre*_*ohn 19 mysql database views materialized-views

如何实现物化视图?

如果没有,我如何用MySQL实现Materialized View?

更新:

以下工作会怎样?这在交易中不会发生,是一个问题吗?

DROP TABLE IF EXISTS `myDatabase`.`myMaterializedView`;
CREATE TABLE `myDatabase`.`myMaterializedView` SELECT * from `myDatabase`.`myRegularView`;
Run Code Online (Sandbox Code Playgroud)

Jus*_*art 30

我维护了一个名为Flexviews的项目(http://github.com/greenlion/swanhart-tools),它为MySQL(即快速刷新)添加了可渐进刷新的物化视图,即使对于使用连接和聚合的视图也是如此.我已经在这个项目上工作了三年.它包括一个用于读取数据库日志的更改数据捕获实用程序.没有使用触发器.

它包括两种刷新方法.第一个类似于您的方法,除了构建新版本,然后RENAME TABLE用于交换旧版本.视图不可用于查询,但是2倍的空间用于短时间.

第二种方法是真正的"快速刷新",它甚至支持聚合和连接.

有一篇关于它的博客文章:http: //www.mysqlperformanceblog.com/2011/04/04/flexviews-part-3-improving-query-performance-using-materialized-views/

Flexviews远远高于旁观者引用的FromDual示例.


cod*_*eim 2

您的示例近似于“完全刷新”物化视图。如果源表包含数百万或数十亿行,您可能需要一个“快速刷新”视图,通常在数据仓库设置中使用。

您可以通过使用插入/更新(upsert)将现有的“视图表”连接到源视图的主键(假设它们可以保留键)或保留上次更新的日期时间来近似快速刷新,并使用它在刷新SQL的条件中减少刷新时间。

另外,请考虑使用表重命名,而不是删除/创建,以便可以构建新视图并将其放置到位,几乎不会出现不可用的情况。首先构建一个新表“mview_new”,然后将“mview”重命名为“mview_old”(或删除它),并将“mview_new”重命名为“mview”。在上面的示例中,当 SQL 填充运行时,您的视图将不可用。