mysql中的物化视图

Nav*_*mar 7 mysql

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

谁能告诉我在mysql中创建它的方法。

cod*_*com 8

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

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

我一直在我的文章创建 MySQL 物化视图中收集和分析这些方法及其优缺点

期待在 MySQL 中创建物化视图的其他方法的反馈或建议


sym*_*ean 5

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

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);
Run Code Online (Sandbox Code Playgroud)

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