我需要从SQL Server表中选择非常多的行(1000万)。我将浏览每个记录并解析每个记录(它们是xml),然后通过存储过程将每个记录写回数据库。
我的问题是,最有效的方法是什么?
我现在这样做的方式是打开2 SqlConnection
(一个用于读取一个用于写入)。读取的一个使用SqlDataReader
,它基本上是select * from table
,我遍历数据集。解析每条记录后,我在第二个连接上执行ExecuteNonQuery
(使用参数)。
是否有任何建议可以提高效率,或者只是这样做的方法?
由于
答案 0 :(得分:0)
您似乎正在逐行编写行。这是最慢的模型。 Write bigger batches.
使用MARS时无需两个连接。不幸的是,MARS在每个写入的行中强制使用14字节的行版本控制标记。可能完全可以接受,或不是。
答案 1 :(得分:0)
我的情况非常渺茫,在这里我做了什么:
现在我必须保持两个数据库同步,我正在使用SQL复制来完成这项工作。
我可以理解实施取决于很多方面,但方法可能会帮助你。
答案 2 :(得分:-1)
我同意Tim Schmelter的帖子 - 我做了一些非常类似的事情......我实际上使用了一个SQLCLR程序,它使用.net(System,将SQL表中的XML列中的数据读入内存(表)。然后使用.net System.Xml命名空间对xml进行反序列化,填充另一个内存表(以目标表的形式),并使用sqlbulkcopy用我需要的那些已解析属性填充该目标SQL表。
SQL Server专为基于集合的操作而设计......如果我正在粉碎/迭代(逐行),我倾向于使用SQLCLR,因为.Net在迭代/数据操作处理方面通常更好。我的规则的一个例外是使用一些元数据来处理数据驱动的进程,清理例程,我可以使用游标。