600K记录的数据库或平面文件?

pab*_*blo 2 c# mysql sql-server

我正在编写一个C#应用程序,需要在某个时间点将大约600K条记录插入数据库.

它们是非常简单的记录:只有3个长.

我正在使用params来设置命令,然后循环遍历内存中的数据以进行插入,在每个循环中将值分配给命令参数并运行command.ExecuteNonQuery()

在SqlServer上完成大约需要50秒,而在MySql上它甚至更慢,而在平面文件上插入相同的数据只需要几毫秒.

我做错了什么或数据库太慢了?

Jef*_*tin 6

由于以下几个原因,您将看到写入平面文件的速度更快:

  • ExecuteNonQuery不会将多个插入语句分组到批处理中,因此每个记录都会产生一个完整的进程间通信周转时间.以组的形式发送插入语句.
  • 您拥有的数据已经是平面文件的形状,因此您可以通过一次写入或一些带缓冲的写入来解除所有数据.
  • 数据库操作倾向于使用n log n时间的树,而简单的数组形状构造将花费线性时间.另一方面,如果您要合并到已排序的平面文件中,则需要一段时间.