mysql中的物化视图

时间:2016-11-22 04:49:12

标签: mysql

如何在mysql中创建物化视图? 我无法像在MS SQL Server中那样创建物化视图。

有谁能让我知道在mysql中创建它的方法。

2 个答案:

答案 0 :(得分:2)

您可以创建一个不可更新的动态视图 - 如果您在基础表中获得(索引)时间戳,则可以在快照中添加,例如:

CREATE VIEW almost_materialzd
AS
SELECT snp.*
FROM snapshot snp
WHERE s.id NOT IN (SELECT id
  FROM source_data sd
  INNER JOIN ref_data rd
  ON rd.value='snapshot of source_data'
  AND sd.update_timestamp>rd.timetamp)
UNION
SELECT *
FROM source_data sd2
INNER JOIN ref_data rd2
ON rd2.value='snapshot of source_data'
AND sd2.update_timestamp>rd2.timetamp);

但更好的解决方案是向基础表添加一个触发器(或触发器),以便在基础表发生更改时重新填充表示物化视图的表中的相关行。

答案 1 :(得分:0)

这是到目前为止我所取得的成功:

  1. 使用触发器-您可以在构建视图的源表上设置触发器。由于仅在需要时才进行刷新,因此可以最大程度地减少资源使用。而且,物化视图中的数据是实时的
  2. 将cron作业与存储过程或SQL脚本一起使用-定期进行刷新。您可以控制何时使用资源。显然,您的数据只是刷新率所允许的。
  3. 使用MySQL计划的事件-与2类似,但在数据库内部运行
  4. Flexviews-使用Justin提到的FlexDC。与真实的物化视图最接近的东西

我一直在我的文章Creating MySQL materialized views

中收集并分析这些方法的优缺点。

期待获得反馈或提出其他在MySQL中创建实例化视图的方法的建议