私はMySQLで約1億レコードを含む大きなテーブルを持っています。 。非常に大きなテーブル(1億以上のレコード)から読み取った場合のMySqlDataReader.Read()の "タイムアウト"
はstring sql = "SELECT * FROM the_table";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
//...
}
しかし、3分間実行した後、タイムアウトの問題が発生します。 私はそれからすべてのレコードを読み、私のC#/ネットプログラムでそれらを処理したい、 はので、私はこのようないくつかのコードを書きました。
私は "限界" を使用してSQLステートメントを変更する場合:
string sql = "SELECT * FROM the_table limit 60000000" //60 million
を、それがOKに動作します。 (ループwhile (rdr.Read())
は約3.8分かかりました)
テーブルが大きすぎるためにタイムアウトが発生しましたか?
ここでは何が起こっているのですか。どのように問題を解決できますか?
なぜあなたはメモリに1億件のレコードを読ましようとしている?それはデータベースを持つことの目的を破り、ダムのストレージシステムに全体のSQLインフラストラクチャを削減するのに役立ちます。 –
@MarcBはおそらくより正確ですが、とにかく*?の代わりにthe_tableから[onefield]を選択するとどうなりますか?おそらくsqlインフラストラクチャは完全に動作していますが、クライアントは単にメモリが不足しています... – rene
実際には、それの部品データを選択します(テーブルの1つは質問に記載されている大きなテーブルです)。それから、「SELECT * FROM the_table」と書いたとしても、「タイムアウト」が発生することがわかりました。私は1つを修正することができれば、私は別のものを修正することができると思います。私は簡単な方法で質問します。 @MarcB – Hancy