C# 运行多个查询的最佳方式

标签 c# mysql .net

我正在使用 C# 应用程序来管理 mySQL 数据库。

我想做的是:

  • 阅读一些记录。
  • 运行一些函数来计算“东西”。
  • 将“内容”插入数据库。

为了计算第 n 个“东西”,我必须已经计算出第 (n-1) 个“东西”。

这就是我所做的:

声明:

static MySqlCommand cmd;
static MySqlDataReader dr;

我的主循环如下:

for (...)
{
    dr.Close();
    cmd.CommandText = "insert into....";
    dr = cmd.ExecuteReader();
}

这花费的时间太长了。总共插入的行数约为2.5M。

当我在常规服务器上使用mySql数据库时,大约需要100-150小时。当我使用本地主机数据库时,大约需要 50 小时。

我认为应该有一种更快的方法。我的想法:

  • 我认为现在我每次循环时都会连接到数据库并与数据库断开连接。这是真的吗?
  • 我可以创建一个 CommandText,其中包含例如 100 个查询(用分号分隔)。这可能吗?
  • 不执行查询,而是将它们输出到文本文件中(文件约为 300MB)。然后使用 phpMyAdmin 将它们插入数据库(额外问题:我正在使用 phpMyAdmin。这样可以吗?有更好的(可能不是 Web)界面吗?)

最佳答案

尝试使用批量插入。我发现这个语法 here 。然后使用 ExecuteNonQuery() 为 SLaks评论中建议。这些结合起来可能会加快速度。

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

关于C# 运行多个查询的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888020/

相关文章:

java - 当三个 Web 应用程序使用同一个数据库时无法建立数据库连接

c# - WPF中如何通过代码让动画更流畅?

c# - 从 Active Directory 获取 GUID 或 native GUID

php - PHP/SQL登录表单问题

mysql - Django 中区分大小写的搜索,但在 Mysql 中被忽略

c# - 静态变量变为空

c# - 基于字符串选择多个属性的值

c# - 与 SQLite/SubSonic(或任何其他数据库)一起使用时,避免在项目中使用 App.config 文件

c# - 如何使用 Xamarin 在 iOS 13 中获取设备 token ?

c# - 所有案例都涵盖了 Bresenham 的线算法