1 直接循环insert :这样效率是最慢的 经过测试测试程序 插入10w条数据需要 5分钟多
2 拼接sql 语句 再一次执行 :这样效率有明显提升 只需要40多s
3 使用 sqlbullcopy :先把要插入的数据 组装成 datatable 再copy 到数据库 效率最佳 只要5s
以下 测试 代码
主程序:
class Program { static void Main(string[] args) { Console.WriteLine("start"); Fun1(); Console.WriteLine("end"); Console.WriteLine("SHEEP ..."); Thread.Sleep(3000); Fun2(); Console.WriteLine("end"); Console.WriteLine("SHEEP ..."); Fun3(); Console.ReadKey(); } /// <summary> /// recyle insert /// </summary> static void Fun1() { Console.WriteLine("recyle start:"+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); for (int i = 0; i < 100000; i++) { string commandText = "insert into GoodsTB(goodsid,goodsname,goodsprice,goodinventory) values('{0}','{1}','{2}','{3}')"; commandText = string.Format(commandText, Guid.NewGuid().ToString(), "shop recyle " +i, new Random().Next(20, 200), new Random().Next(20, 200)); SQLHelper.ExcuteSqlNoReturn(commandText); } Console.WriteLine("recyle end:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } static void Fun2() { Console.WriteLine("stringBuilder start:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 100000; i++) { string commandText = "insert into GoodsTB(goodsid,goodsname,goodsprice,goodinventory) values('{0}','{1}','{2}','{3}')"; commandText = string.Format(commandText, Guid.NewGuid().ToString(), "shop stringBuilder " + i, new Random().Next(20, 200), new Random().Next(20, 200)); sb.Append(commandText); sb.Append("; "); } SQLHelper.ExcuteSqlNoReturn(sb.ToString()); Console.WriteLine("stringBuilder end:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } static void Fun3() { Console.WriteLine("MutiInsertData start:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("GoodsId",typeof(string))); dt.Columns.Add(new DataColumn("GoodsName", typeof(string))); dt.Columns.Add(new DataColumn("GoodsPrice",typeof(Decimal))); dt.Columns.Add(new DataColumn("GoodsInventory", typeof(Int16))); for (int i = 0; i < 100000; i++) { dt.Rows.Add(Guid.NewGuid().ToString(), "shop MutiInsertData " + i, new Random().Next(20, 200), new Random().Next(20, 200)); } SQLHelper.MutiInsertData(dt); Console.WriteLine("MutiInsertData end:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } }