1

我必须将表从 MSSQL Server 迁移到 MySql。问题是表很大(6500 万条记录),整个过程耗时太长。有谁知道如何加快速度?有什么有用的工具可以改善这一点吗?

4

7 回答 7

1

只需要做一次吗?不要浪费太多时间优化,等到它完成后再继续。

需要更频繁地进行吗?然后详细说明您当前使用的工具/技术会有所帮助。

于 2008-10-23T12:41:05.460 回答
1

这是我将 800K 记录表从 MS Sql Server 迁移到 MySQL 的方法。

创建查询以表格格式显示数据:

SELECT [PostalCode] + ' ' +
  [StateCode] + '   ' +
  [Latitude] + '    ' +
  [Longitude] + '   ' +
  [CityName]  
FROM [dbo].[PostalCode]

使用 SQL Server Management Studio 执行查询,并选择将结果输出到文件中(菜单:查询 -> 结果到 -> 结果到文件)

文件名必须是 MySQL 中表的名称。文件扩展名无关紧要。

然后使用mysqlimport.exe(在 Windows 上)导入数据(该表必须存在于 MySQL 数据库中):

mysqlimport.exe --user=user_name
  --columns=postalcode,statecode,latitude,longitude,cityname 
  --ignore-lines=2 databaseName pathToFile

导入后,我不得不删除表的最后 2 条记录,因为文件末尾包含一些垃圾:(受影响的 818193 行)

对于 800K,它非常快:10 秒导出,然后 10 秒导入。

希望这可以帮助。

于 2009-07-31T22:28:44.870 回答
0

您可以将数据导出为文本,然后使用 mysql load 语句:

将数据本地 infile 加载'/somefolder/text_file_with_data.txt'到表 some_table 字段中,这些字段由终止的'\t'行终止'\n'

或者,如果您将数据文件放在 mysql 服务器上,您可以:

将数据 infile 加载'/somefolder_on_the_mysql_server/text_file_with_data.txt'到表 some_table 字段中,这些字段由终止的'\t'行终止'\n'

我不确定要导出 mssql 的语法是什么

您始终可以以 10,000 或 100,000 个为一组导出。

于 2008-10-23T12:43:25.550 回答
0

确保 mysql 表最初没有索引;加载完成后添加它们。

于 2008-10-23T17:56:49.520 回答
0

通过在 my.ini 文件中使用这样的语句,在开始插入之前确保 MySQL 表存储文件足够大:

innodb_data_file_path=ibdata1:1000M:autoextend
于 2008-10-23T18:01:43.160 回答
0

尝试使用 SQL Server 的导入/导出向导生成的 SSIS/DTS 包是否可以将数据从 mssql 中取出并导入 mysql。(使用适当的 OLEDB/ADO 提供程序连接到 MySQL。

周五回家时开始,周末后再回来查看;)

于 2008-10-23T19:23:00.250 回答
0

确保没有列上有索引,并删除任何外键(如果您使用 InnoDB 作为表类型)以进行导入。

于 2008-10-23T19:27:26.640 回答