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"));
        }
    }
View Code

相关文章: