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

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

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

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

谢谢

【问题讨论】:

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

标签: mysql sql query-optimization


【解决方案1】:

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

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

changetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

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

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多