SQL 数据库迁移 - 性能问题(将数据从一个数据库复制到另一个数据库)

Posted

技术标签:

【中文标题】SQL 数据库迁移 - 性能问题(将数据从一个数据库复制到另一个数据库)【英文标题】:SQL Database Migration - Performance issue (Copying data from one database to another) 【发布时间】:2011-11-16 11:59:19 【问题描述】:

我创建了 Windows 应用程序 (C#.Net) 来将数据从一个数据库迁移到另一个数据库。 在这里,我从数据库 ABC 中选择客户表的所有行,并将所有行插入数据库 XYZ 的经销商表中。

我的问题是,当我从表中选择前 1000 行时,插入这 1000 条记录需要 2 分 35 秒。 但是当我从表中选择前 5000 行时,插入这 5000 条记录需要 15 分钟(不是 10 分钟)

有什么方法可以优化性能,以便我可以非常快速地插入所有记录/数据。 (注意:这里对于foreach循环中的每条记录,我都创建了sql参数并插入sql语句)

我也使用了进度条,但是当我从 Windows 应用程序失去焦点时,它变得无响应(不响应窗口标题)并且我看不到进度条的状态/进度(但插入数据的过程正在后台工作,但不在 UI 中)。

这两个问题怎么解决??

【问题讨论】:

不要逐行插入,使用某种bulk insert。 @MichałPowaga 我不能使用 BULK Insert,因为我必须使用代码检查许多条件。 【参考方案1】:

您可以为一百条记录创建单个 sql 命令并触发它,而不是单个记录的单个 sql 命令,这将作为批量工作。

http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/12/05/sql-server-2008-t-sql-insert-multiple-rows.aspx

对于进度条,您可以使用线程进行更新。

http://msdn.microsoft.com/en-us/library/ms951089.aspx

【讨论】:

我不能使用单个 sql 命令,因为我必须检查许多条件。我只想知道任何技术可以最大限度地减少这个时间。

以上是关于SQL 数据库迁移 - 性能问题(将数据从一个数据库复制到另一个数据库)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 代码将 SQL Server CE 迁移到 SQL Server 2012 Express

从 MySQL 迁移到 PostgreSQL 后类似查询的 SQL 性能问题

怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

从 Sql 迁移到 NoSql 数据库的限制

将数据从 MySQL 迁移到 SQL Server

将数据和架构从 MySQL 迁移到 SQL Server