C# Dapper批量插入大量數據優化

以三萬條數據爲例:

Dapperr的Excute方法執行插入語句的本質是一條一條的插入,當數據量非常大是會很慢,三萬條用了十幾分鍾

將一組數據一塊插入就會相當的快,三萬條用了12秒

優化前的批量導入:

//_vfsContext.Conn.Open();
//var tran = _vfsContext.Conn.BeginTransaction(IsolationLevel.Serializable);
//Stopwatch stopwatch = new Stopwatch();
//stopwatch.Start();
//var inserSql = $@"insert into tm_receiveconfirm(ConfirmStamp,OrderNo,InsertTime) 
//                    values(@ConfirmStamp,@OrderNo,@InsertTime)";
//_vfsContext.Conn.Execute(inserSql, tmList, tran);
//tran.Commit();
//stopwatch.Stop();

優化後的批量導入:

                //組織數據
                for (var i = 0; i < OrderNos.Count; i++)
                {
                    tmList.Add(new tm_receiveconfirm()
                    {
                        OrderNo = OrderNos[i],
                        ConfirmStamp = uniqueId,
                        InsertTime = DateTime.Now
                    });
                }

                //臨時表插入數據
                //拼接sql
                var strsql = new StringBuilder();
                strsql.Append("insert into tm_receiveconfirm(ConfirmStamp,OrderNo,InsertTime) values ");
                foreach (var item in tmList)
                {
                    strsql.AppendFormat("('{0}','{1}','now()'),", uniqueId, item.OrderNo);
                }
                var inserSql = strsql.ToString();
                var sql=inserSql.Substring(0, inserSql.LastIndexOf(','));
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                log.Info($"{sql}");
                _vfsContext.Conn.Execute(sql, null);
                stopwatch.Stop();

                log.Info($"數據插入臨時表end:{stopwatch.ElapsedMilliseconds}");

取經地址:https://www.cnblogs.com/wwg1990/p/10362667.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章