这篇文章给大家分享的是有关mysql数据插入效率的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

做数据插入时,发现之前上班做哪些办公系统压根就没考虑过数据库性能这些,因为涉及的数据量小,时间和效率看不出来,可当数据量很大了,大到了每秒需要10000次插入时,这时就不得不考虑你的sql 语句了。当插入100条数据,能想到的数据插入方式:

1:for循环100次,一次次插入数据。连接一次插入100次,这样是最费时间的也是最费IO和连接的;

2:将100数据插入语句组成一个sql语句,然后连接一次,插入数据。这种费时比第一种要好。

3:使用事物,100次插入,最后一次事物commit; 这种比第二种更快;

4:使用insert语句本身的多数据插入;

当以上方法在少量的数据面前,几乎没什么差别,我们压根感觉不出来。可是,当数据量稍微提大点,比如一次10000条数据。插入的速度效率就出来;

这是mysql实例类;此实例提供mysql的连接,和数据库相关操作

publicclassMySqlInstance{//连接字符串privatestaticstringmySqlConnectionStr="Server=localhost;Database=test;Uid=root;Pwd=password.1;";privatestaticMySqlConnection_mysqlConnect;privatestaticMySqlConnectionmysqlConnect{get{if(null==_mysqlConnect){_mysqlConnect=newMySqlConnection(mySqlConnectionStr);}return_mysqlConnect;}}privatestaticMySqlCommand_mysqlCommand;privatestaticMySqlCommandmysqlCommand{get{if(null==_mysqlCommand){_mysqlCommand=mysqlConnect.CreateCommand();}return_mysqlCommand;}}//打开连接publicstaticvoidOpenConnect(){mysqlConnect.Open();}//关闭连接publicstaticvoidCloseConnect(){mysqlConnect.Close();}publicstaticMySqlConnectionConnection{get{returnmysqlConnect;}}//防注入方式的插入数据//使用事务10000插入,最后才一次事务提交publicstaticintInsertData(stringCommand,List<MySqlParameter>Params){//程序时间监控Stopwatchsw=newStopwatch();//程序计时开始sw.Start();OpenConnect();//事务开始MySqlTransactiontrans=mysqlConnect.BeginTransaction();mysqlCommand.CommandText=Command;mysqlCommand.Parameters.AddRange(Params.ToArray());intcount=0;for(inti=0;i<10000;i++){if(mysqlCommand.ExecuteNonQuery()>0)count++;}//事务提交trans.Commit();CloseConnect();mysqlCommand.Parameters.Clear();//计时停止sw.Stop();TimeSpants2=sw.Elapsed;Console.WriteLine(ts2.TotalMilliseconds);returncount;}//查询出来的是MySqlDataReader要使用就不能关闭连接publicstaticMySqlDataReaderSelectData(stringsql){Stopwatchsw=newStopwatch();sw.Start();//OpenConnect();MySqlCommandnewcommond=newMySqlCommand(sql,mysqlConnect);MySqlDataReaderdata=newcommond.ExecuteReader();//CloseConnect();sw.Stop();TimeSpants2=sw.Elapsed;Console.WriteLine(ts2.TotalMilliseconds);returndata;}///<summary>///查询出来的是数据集合///</summary>///<paramname="sql"></param>///<returns></returns>publicstaticDataSetSelectDataSet(stringsql){MySqlCommandnewcommond=newMySqlCommand(sql,mysqlConnect);MySqlDataAdapteradapter=newMySqlDataAdapter();adapter.SelectCommand=newcommond;DataSetds=newDataSet();adapter.Fill(ds);returnds;}//不安全插入有注入publicstaticintInsertDataSql(stringsql){//OpenConnect();mysqlCommand.CommandText=sql;intcount=mysqlCommand.ExecuteNonQuery();//CloseConnect();returncount;}//安全插入参数使用@//不使用事务10000次插入publicstaticintInsertDataNoTran(stringCommand,List<MySqlParameter>Params){Stopwatchsw=newStopwatch();sw.Start();OpenConnect();mysqlCommand.CommandText=Command;mysqlCommand.Parameters.AddRange(Params.ToArray());intcount=0;for(inti=0;i<10000;i++){if(mysqlCommand.ExecuteNonQuery()>0)count++;}CloseConnect();mysqlCommand.Parameters.Clear();sw.Stop();TimeSpants2=sw.Elapsed;Console.WriteLine(ts2.TotalMilliseconds);returncount;}//一次性拼10000个插入语句一次性提交publicstaticvoidtest4(){Stopwatchsw=newStopwatch();sw.Start();MySqlInstance.OpenConnect();MySqlTransactiontran=MySqlInstance.Connection.BeginTransaction();stringcommand=string.Empty;for(inti=0;i<10000;i++){stringtemp=string.Format("insertintotest.testtable(pname,pwd)value('{0}','{1}');\r\n","name"+i,"password."+i);command+=temp;}MySqlInstance.InsertDataSql(command);tran.Commit();MySqlInstance.CloseConnect();sw.Stop();TimeSpants2=sw.Elapsed;Console.WriteLine(ts2.TotalMilliseconds);}}

最后建立控制台程序,分别使用事务提交,不使用事务,和拼接10000条插入在组成事务,这三种方式做一个测试,打印出耗时。结果如图:

可以看到:10000次插入使用事务提交只用时4.7秒,而不使用事务用时311秒,拼装成10000次insert语句的耗时7.3秒。这里面耗时7.3秒的,理论上,在数据库sql执行上也应该和使用事务差不多,这里的耗时主要是用作字符串的拼接上,客户端耗时比较多;

贴上测试程序代码:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingMySql.Data;usingMySql.Web;usingMySql.Data.MySqlClient;usingSystem.Diagnostics;usingSystem.Data;namespacemysqlDEMO01{classProgram{staticvoidMain(string[]args){testInsert();Console.ReadLine();}//使用安全防注入参数使用@,安全插入。publicstaticvoidtestInsert(){List<MySqlParameter>lmp=newList<MySqlParameter>();lmp.Add(newMySqlParameter("@pname","hello2"));lmp.Add(newMySqlParameter("@pwd","1232"));stringcommand="insertintotest.testtable(pname,pwd)value(@pname,@pwd);";MySqlInstance.InsertData(command,lmp);List<MySqlParameter>lmp2=newList<MySqlParameter>();lmp2.Add(newMySqlParameter("@pname","hello2"));lmp2.Add(newMySqlParameter("@pwd","1232"));MySqlInstance.InsertDataNoTran(command,lmp2);test4();}}}

感谢各位的阅读!关于“mysql数据插入效率的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!