【发布时间】:2011-12-12 13:16:24
【问题描述】:
我有一个如下的数据库表:
create table temperature
(id int unsigned not null auto_increment primary key,
temperature double
);
在我的程序中,我将大约 2000 万个温度插入到表中。 我在 .Net 环境中工作,使用连接器/网络连接到 MySql。代码如下:
List<double> temps = new List<double>();
...
string connStr = "server=localhost;user=name;database=test;port=3306;password=*****;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
conn.Open();
//temps.Count is about 20 million
for (int i = 0; i < temps.Count; i++)
{
string sql1 = "INSERT INTO temperature VALUES (null, "+temps[i]+")";
MySqlCommand cmd1 = new MySqlCommand(sql1, conn);
cmd1.ExecuteNonQuery();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
我怎样才能尽可能快地插入这么多行数据? (它每分钟只能在我的电脑中插入 2000 条记录。)
【问题讨论】:
-
我有点好奇。为什么要在数据库中插入 2000 万个温度?
-
你需要自动增量吗?我有类似的情况(在 sql server 上),我在加载程序上管理增量密钥客户端。我在当前的硬件上每秒管理 75.000 行。不过没有 SQL...
-
你的 sql 也“很烂” ;) 你不能一次提交多个插入语句吗?它是一个字符串 - mysql 可以处理 hthat 吗?每次往返 10 次是往返行程的 10%。线程增加了更多(多线程负载)。
-
@TomTom 我坚信多线程将数据“强制”输入服务器在这里不会有太大帮助,因为它会在服务器上产生不必要的锁定。
-
哦,但是 - 大多数时候服务器在这里不做任何事情,因为你需要从客户端到服务器的往返。发送数据,等待数据返回——此时另一个线程可以更新表。
标签: .net mysql connector-net