我正在使用 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/