C# MySQL 将大型数据表上传到 MySQL 数据库表的最佳方法

本文关键字:MySQL 数据库 最佳 方法 大型 数据表 | 更新日期: 2023-09-27 18:30:30

我有一个非常大的表,在 c# 数据表中有大约 1,000,000 行数据,我想将其上传到 mysql db 表中。最好和最快的方法是什么?

遍历行并一次上传一行看起来性能非常糟糕,并且有时会引发超时异常。

我知道解决方案之一是将其写出到文件中并使用mysqlbulkloader从文件中读取它。有没有其他方法可以直接从数据表到数据库?

C# MySQL 将大型数据表上传到 MySQL 数据库表的最佳方法

非通用解决方案以使用 StringBuilder 构建 SQL 查询的形式存在。我已经在 MSSQL 2008 中使用了这样的解决方案,因此它可能对您有用。

string _insertQuery(IEnumerable<Item> datatable) { 
  sb.Append("INSERT INTO table (coltext, colnum, coltextmore) VALUES "); 
  foreach (var i in datatable) { 
    sb.AppendFormat("('{0}', {1}, '{2}'),", 
      new object[] { i.ColText, i.ColNum, i.ColTextMore }); 
  }
  sb.Remove(sb.Length - 1, 1);
  return sb.ToString();  
}

您将(可能)需要一种方法来翻阅 1,000,000 行:

var lst = new List<Item>(); 
// ...
for (int i = 0; i < datatable.Count; i += 1000) { 
  _insertQuery(lst.RangeOf(i, 1000); 
}

RangeOf()是我通过列表编写的IList扩展:

public static IList<T> RangeOf<T>(this IList<T> src, int start, int length) { 
  var result = new List<T>(); 
  for (int i = start; i < start + length; i++) { 
    result.Add(src[i]); 
  }
  return result; 
}