У меня есть большая таблица, содержащая около 100 миллионов записей в MySQL. . Я хочу, чтобы прочитать все записи из него, и обрабатывать их в моем C#/Net программы, поэтому я написал код так:MySqlDataReader.Read() «Тайм-аут» при чтении из очень большой таблицы (более 100 миллионов записей)
string sql = "SELECT * FROM the_table";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
//...
}
Но после запуска в течение 3 минут, проблема возникает тайм-аут.
Если изменить оператор SQL, чтобы использовать "предел":
string sql = "SELECT * FROM the_table limit 60000000" //60 million
то он хорошо работает. (петля while (rdr.Read())
заняла около 3,8 минуты)
Был ли тайм-аут вызван тем, что стол был слишком большим?
Что здесь происходит и как исправить проблему?
Почему вы пытаетесь чавкать 100million записи в память? это побеждает цель наличия базы данных и уменьшает весь SQL инфраструктуру в немую систему хранения –
Как @MarcB, вероятно, правильнее, так или иначе что произойдет, если вы выберете [одно поле] из таблицы_ вместо «?», возможно, инфраструктура sql работает отлично, но ваш клиент просто не в памяти ... – rene
Ну, на самом деле я встречаю проблему «тайм-аута», когда я соединяю две таблицы и выберите его часть (одна из таблиц - большая таблица, упомянутая в вопросе). Затем я обнаружил, что «тайм-аут» произошел, даже я написал «SELECT * FROM the_table». Я думаю, что если я могу исправить один, я могу исправить другое. поэтому я выбираю простой способ спросить. @MarcB – Hancy