我刚刚下载了最新版本的MySQL Workbench(6.3.6)并尝试使用新的"表数据导出"将远程表(在Google CloudSQL上)导出到csv。向导。该表有大约600,000行,最终下载的大小约为75MB。花了7.5个小时。
我意识到我可以使用Google Developer Console来执行此导出(我做过,大约花了15秒),但似乎MySQL Workbench出了问题。是否会出现配置问题导致此问题变得如此缓慢?
答案 0 :(得分:2)
<强>描述强>: Workbench通过CSV导出向导导出大型数据集非常慢。不成比例地慢速comapred到较小的集合。但是,这是我在.NET之前遇到过的。
如何重复: 获取一个包含15k左右记录或更多记录的表,然后通过向导导出。注意它需要多长时间然后导出该数据的子集,并查看所花费的时间与行数的线性关系。
建议修复: 在构建CSV导出应用程序时我注意到的一点是,MS .NET框架无法很好地处理大字符串,因此往往表现不佳。
我找到了一个解决方案。当你完成生成它时,在将大量字符串构建到文件中时,而不是构建一个巨大的字符串并在导出完成后立即将其写入文件,只需做几个就可以获得更好的性能一次生成一百行CSV,将其写入文件并刷新您已生成数据的缓冲区。
我建议写入临时文件,然后在完成后将其重命名/移动到用户指定的文件。写入临时然后移动/重命名是Photoshop和其他一些应用程序保存数据的方式。我在开发自己时发现写x行和刷新比试图让.NET管理20MB字符串要快得多。
答案 1 :(得分:2)
我知道这个问题已经很老了,但是我正在回答,因为我最近遇到了这个问题。我试图导出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 :(得分:0)