程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL數據庫inset性能優化

MySQL數據庫inset性能優化

編輯:MySQL綜合教程

MySQL數據庫inset性能優化


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

注意事項:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved