c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

2019-12-30 14:28:12丽君

MySql的批量插入,是将值全部写在语句的values里,例如,insert batcher(id, name) values(1, '1', 2, '2', 3, '3', ........ 10, '10')。

五、测试

接下来写一个测试用例来看一下使用批量插入的效果。    


 public void TestBatchInsert()
    {
      Console.WriteLine(TimeWatcher.Watch(() =>
        InvokeTest(database =>
          {
            var table = new DataTable("Batcher");
            table.Columns.Add("Id", typeof(int));
            table.Columns.Add("Name1", typeof(string));
            table.Columns.Add("Name2", typeof(string));
            table.Columns.Add("Name3", typeof(string));
            table.Columns.Add("Name4", typeof(string));

            //构造100000条数据
            for (var i = 0; i < 100000; i++)
            {
              table.Rows.Add(i, i.ToString(), i.ToString(), i.ToString(), i.ToString());
            }

            //获取 IBatcherProvider
            var batcher = database.Provider.GetService<IBatcherProvider>();
            if (batcher == null)
            {
              Console.WriteLine("不支持批量插入。");
            }
            else
            {
              batcher.Insert(table);
            }

            //输出batcher表的数据量
            var sql = new SqlCommand("SELECT COUNT(1) FROM Batcher");
            Console.WriteLine("当前共有 {0} 条数据", database.ExecuteScalar(sql));

          })));
    }

以下表中列出了四种数据库生成10万条数据各耗用的时间

 

数据库

耗用时间

MsSql 00:00:02.9376300
Oracle 00:00:01.5155959
SQLite 00:00:01.6275634
MySql 00:00:05.4166891


注:相关教程知识阅读请移步到c#教程频道。