MySQL:如何跟踪视图中的更改

Posted

技术标签:

【中文标题】MySQL:如何跟踪视图中的更改【英文标题】:MySQL: how to keep track of changes in a view 【发布时间】:2021-01-27 17:46:19 【问题描述】:

在我的 mysql 数据库中,我有一个由非常复杂的查询(+500 万行,118 列)构建的海量视图,它每天都会更改部分内容。每天,我都要查询这个视图并将它的全部内容插入到一个更大的表中,这个操作可能需要 3.5 到 5 个小时。

我尝试将数据分块导出为 CSV 文件,然后使用LOAD DATA INFILE 以更快的方式加载记录,但导出阶段非常缓慢。

有没有办法检测视图中的变化并只更新更大表中的那些记录?有什么建议可以处理视图中存储的这么多记录吗?

谢谢

【问题讨论】:

如何将非常复杂查询的所有结果存储到一个临时表中,然后使用 EXCEPT 与您之前的视图进行比较,然后将这些不同的记录加载到另一个表中 这是一个一般很难解决的问题。我的一位前同事开发了一个名为 FlexViews 的解决方案。花了几年的时间来发展。我不知道他是否还在维护它。 percona.com/blog/2011/03/23/… 【参考方案1】:

严格来说,视图不包含任何记录。相反,它展示了底层表的一个很好的视图。

您能分辨出基础表中哪些行发生了变化吗?这些表中是否有这样定义的列?

changetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

如果是这样,您可能能够生成一个发散视图,其中包含与现有视图相同的列,只包含自特定时间以来更改的行。

【讨论】:

以上是关于MySQL:如何跟踪视图中的更改的主要内容,如果未能解决你的问题,请参考以下文章

如何在不刷新php页面的情况下跟踪mysql数据库中的更改?

UIViews 是 UIScrollView 的子视图。如何跟踪子视图在定义的矩形内?

您如何跟踪数据库更改?

Mysql:如何使物化视图中的列成为主键

如何跟踪存储在 Oracle Berkeley DB XML 中的文件的更改

ORM 中的跟踪数据如何保持最新?