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 的子视图。如何跟踪子视图在定义的矩形内?