我們在使用中MySQL的時候難免會遇到大批量數據inset的情況,通常最簡單的方法就是寫一個insert,然後通過循環給變量賦值,批量插入數據庫:
//save rddform for (int i = 0; i < rddformlist.Count; i++) { string cmdText = "insert into rddform (ID,CreatedTime,ModifiedTime,CreatedBy,ModifiedBy,FormType) values ('" + rddformlist[i].RddFormGuid + "','" + rddformlist[i].CreateTime + "','" + rddformlist[i].ModifyTime + "','" + rddformlist[i].CreateBy + "','" + rddformlist[i].ModifyBy + "'," + rddformlist[i].FormType + ")"; MySqlCommand mysqlcom = new MySqlCommand(cmdText, mysqlcon); mysqlcom.Transaction = trans; //綁定事務 mysqlcom.ExecuteNonQuery(); }經過方法經過親測,性能不太好,本地大概是一秒insert20條數據,雲上大概是一秒insert3條數據。兩千條數據本地大概就要一分半,雲上大概十幾分,顯然速度太慢了。
現在我們改為多條數據合並插入,就是用一個insert語句插入所有的數據:
//save rddform for (int i = 0; i < rddformlist.Count; i++) { strRddForm.Append("('" + rddformlist[i].RddFormGuid + "','" + rddformlist[i].CreateTime + "','" + rddformlist[i].ModifyTime + "','" + rddformlist[i].CreateBy + "','" + rddformlist[i].ModifyBy + "','" + rddformlist[i].FormType + "')"); if (i<rddformlist.Count-1) { strRddForm.Append(","); } } MySqlCommand rddformcom = new MySqlCommand(strRddForm.ToString(), mysqlcon); rddformcom.Transaction = trans; //綁定事務 rddformcom.ExecuteNonQuery();親測之後兩千條本地真的是秒插,雲上大概一秒多,這速度讓人根本沒有拒絕的理由,果斷的把代碼改了。當然速度可能根據個人機器以及網絡環境因素有關,下面是網上牛人做的性能對比
注意事項: