【问题标题】:MySQL workbench table data export extremely slowMySQL工作台表数据导出极慢
【发布时间】:2016-04-12 07:37:16
【问题描述】:

我刚刚下载了最新版本的 MySQL Workbench (6.3.6),并尝试使用新的“表数据导出”向导将远程表(在 Google CloudSQL 上)导出到 csv。该表大约有 600,000 行,最终下载的大小约为 75MB。耗时 7.5 小时。

我意识到我可以使用 Google Developer Console 来执行此导出(我这样做了,并且花了大约 15 秒),但 MySQL Workbench 似乎有问题。会不会是配置问题导致运行如此缓慢?

【问题讨论】:

  • 好奇,你是把文件导出到本地还是远程机器上?改变这个有什么影响吗?
  • 你能在你自己和实例IP之间运行一个traceroute(mtr很棒)来诊断网络延迟吗?

标签: mysql mysql-workbench google-cloud-sql


【解决方案1】:

我知道这个问题已经很老了,但我正在回答,因为我最近遇到了这个问题。我试图导出超过 200 万行,但花了 2 天时间才完成了一半。这是在尝试了几种不同的出口方式之后。然后发现了这个:

SELECT * 
FROM my_table
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/my file.csv' 
FIELDS ENCLOSED BY '"' 
TERMINATED BY ';' 
ESCAPED BY '"' 
LINES TERMINATED BY '\r\n';

它在 80 秒内完成!

请注意:如果您遇到secure_file_priv 问题,请将文件路径设置为等于以下结果:

SHOW VARIABLES LIKE "secure_file_priv"

【讨论】:

    【解决方案2】:

    说明: Workbench 通过 CSV 导出向导导出大型数据集的速度非常慢。与较小的集合相比,速度异常缓慢。但是,这是我之前使用 .NET 时遇到的问题。

    如何重复: 获取一个包含 15k 或更多记录的表,并通过向导导出。请注意它需要多长时间,然后导出该数据的子集,并查看所用时间与行数之间的线性关系。

    建议的修复方法: 我在构建 CSV 导出应用程序时注意到的一点是,MS .NET 框架不能很好地处理巨大的字符串,因此往往性能很差。

    我找到了解决方案。当您完成生成后将巨大的字符串构建到转储到文件中时,而不是构建 1 个巨大的字符串并在导出完成时将其全部写入文件,我只需执行一些操作即可获得更好的性能一次生成数百行 CSV,将其写入文件并刷新您一直在写入生成数据的缓冲区。

    我建议写入一个临时文件,然后在完成后将其重命名/移动到用户指定的文件。写入临时然后移动/重命名是 Photoshop 和其他一些应用程序保存数据的方式。而且我在开发自己时发现的写入 x 行和刷新比尝试让 .NET 管理 20MB 字符串要快得多。

    【讨论】:

      【解决方案3】:

      尝试使用 ETL 工具 Pental ETL

      https://www.mycli.net/

      【讨论】:

        猜你喜欢
        • 2016-01-22
        • 2017-04-15
        • 2022-12-13
        • 2018-11-21
        • 2014-04-14
        • 2014-04-18
        • 2021-04-11
        • 1970-01-01
        • 2017-12-06
        相关资源
        最近更新 更多