我們在使用中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(); 親測之後兩千條本地真的是秒插,雲上大概一秒多,這速度讓人根本沒有拒絕的理由,果斷的把代碼改了。當然速度可能根據個人機器以及網絡環境因素有關,下面是網上牛人做的性能對比
注意事項: