从非常大的表(超过1亿条记录)读取时,MySqlDataReader.Read()“超时”

时间:2011-12-30 12:45:33

标签: mysql mysqldatareader

我有一个大表,其中包含大约1亿条MySQL记录。 我想从中读取所有记录并在我的C#/ .Net程序中处理它们, 所以我写了一些像这样的代码:

string sql = "SELECT * FROM the_table";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
//...
}

但是在运行3分钟后,出现超时问题。 This is the error output:

如果我将SQL语句更改为使用“limit”:

string sql = "SELECT * FROM the_table limit 60000000" //60 million

然后它运作正常。 (循环while (rdr.Read())花了大约3.8分钟)

因为桌子太大而造成超时吗?

这里发生了什么,如何解决问题?

2 个答案:

答案 0 :(得分:1)

好的,我终于解决了这个问题!那是因为我使用了“"ADO.NET Driver for MySQL (Connector/Net)  这是由MySQL开发的。并且可能存在一些错误。然后我改为使用dotConnect,问题就消失了。感谢所有帮助。

答案 1 :(得分:0)

我已将命令超时设置为更高的值,并修复了问题。

 MySqlCommand mySqlCommand = new MySqlCommand(sql_cmd);
 mySqlCommand.Connection = _connection;
 mySqlCommand.CommandTimeout = 3600;

希望这有帮助