我正在编写一个 C# 应用程序,它需要在某个时间点将大约 60 万条记录插入到数据库中。
它们是非常简单的记录:只有 3 个多头。
我正在使用 params 来设置命令,然后循环访问内存中的数据以进行插入,在每个循环中将值分配给命令参数并运行 command.ExecuteNonQuery()
在 SqlServer 上完成大约需要 50 秒,在 MySql 上甚至更慢,而在平面文件上插入相同的数据只需要几毫秒。
是我做错了什么还是数据库太慢了?
最佳答案
由于以下几个原因,您会发现写入平面文件的速度更快:
ExecuteNonQuery
不会将多个插入语句分组到批中,因此您会为每条记录招致完整的进程间通信周转。分组发送您的插入语句。- 您拥有的数据已经采用平面文件的形式,因此您可以在一次写入或几次带有缓冲的写入中将其全部触发。
- 数据库操作倾向于使用需要 n log n 时间的树,而简单的数组结构将花费线性时间。另一方面,如果您要合并到一个排序的平面文件中,那将需要一段时间。
关于c# - 600K 记录的数据库或平面文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1051781/