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

标签 c# mysql sql-server

我正在编写一个 C# 应用程序,它需要在某个时间点将大约 60 万条记录插入到数据库中。

它们是非常简单的记录:只有 3 个多头。

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

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

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

最佳答案

由于以下几个原因,您会发现写入平面文件的速度更快:

  • ExecuteNonQuery 不会将多个插入语句分组到批中,因此您会为每条记录招致完整的进程间通信周转。分组发送您的插入语句。
  • 您拥有的数据已经采用平面文件的形式,因此您可以在一次写入或几次带有缓冲的写入中将其全部触发。
  • 数据库操作倾向于使用需要 n log n 时间的树,而简单的数组结构将花费线性时间。另一方面,如果您要合并到一个排序的平面文件中,那将需要一段时间。

关于c# - 600K 记录的数据库或平面文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1051781/

相关文章:

C#:动态用户控制回发返回 true,即使 UC 是第一次加载

mysql - 拉拉维尔 5 : inserting only if all values exist

mysql。存储过程错误 1328

mysql - SQLITE 查询连接两个具有不同条件的相同表

c# - 为什么要设置命令对象参数的大小参数呢?

c# - Dotconnect for PostgreSQL 未显示在数据源中

c# - 谁能用示例客户端应用程序解释 IExceptionHandler 的工作流程

mysql - 用于 MySQL 的 Bash 脚本

c# - 使用标签将每个表数据加载到 html 表

c# - 委托(delegate)中的方法参数