Dav*_*lli 6 mysql mysql-workbench google-cloud-sql
我刚刚下载了最新版本的MySQL Workbench(6.3.6)并尝试使用新的"表数据导出"向导将远程表(在Google CloudSQL上)导出到csv.该表有大约600,000行,最终下载的大小约为75MB.花了7.5个小时.
我意识到我可以使用Google Developer Console来执行此导出(我做了,大约花了15秒),但似乎MySQL Workbench出了问题.是否会出现配置问题导致此问题变得如此缓慢?
我知道这个问题已经很老了,但我回答是因为我最近遇到了这个问题。我试图导出 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';
Run Code Online (Sandbox Code Playgroud)
而且只用了80秒就完成了!
请注意:如果遇到secure_file_priv问题,请将文件路径设置为等于以下结果:
SHOW VARIABLES LIKE "secure_file_priv"
Run Code Online (Sandbox Code Playgroud)
小智 4
描述:Workbench 通过 CSV 导出向导导出大型数据集非常慢。与较小的集合相比,速度慢得不成比例。然而,这是我之前在 .NET 中遇到过的情况。
如何重复:获取一个包含 15k 左右记录或更多的表,并通过向导导出。注意需要多长时间,然后导出该数据的子集,并查看所花费的时间与行数之间的线性关系。
建议的修复:在构建 CSV 导出应用程序时,我注意到 MS .NET 框架无法很好地处理巨大的字符串,因此往往表现不佳。
不过我找到了解决方案。当您完成生成后将巨大的字符串构建到转储到文件中时,而不是构建 1 个巨大的字符串并在导出完成时将其全部写入文件,只需执行一些操作即可获得更好的性能一次生成一百行 CSV,将其写入文件并刷新您一直在写入生成数据的缓冲区。
我建议写入临时文件,然后在完成后将其重命名/移动到用户指定的文件。“写入临时文件,然后移动/重命名”是 Photoshop 和其他一些应用程序保存数据的方式。我在自己开发时发现,写入 x 行和刷新比尝试让 .NET 管理 20MB 字符串要快得多。