亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

關于拼sql語句執行與直接執行存儲過程的效率比較

系統 2326 0

1.關于拼sql語句執行與直接執行存儲過程的效率比較

最近對于一個舊的程序的導入進行優化,不過由于這個導入程序原來是直接在程序中使用拼SQL語句執行導入,執行時間較長,一般要十分鐘左右。


1)在程序代碼中拼sql語句,類似代碼如下:
?? ??? ??? ??? ?System.Data.OleDb.OleDbCommand Command=conn.CreateCommand();
?? ??? ??? ??? ?Command.CommandTimeout=0;
?? ??? ??? ??? ?Command.Transaction=trans;
?? ??? ??? ??? ?Command.CommandType=CommandType.Text;
?? ??? ??? ??? ?string sql="";
?? ??? ??? ??? ?for(int i=0;i<IWo_Img.Count;i++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?Wo_Img=IWo_Img[i] as EMS_EDI_WO_IMG;
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?Wo_ImgDb.Wo_No=Wo_Img.Wo_No;
?? ??? ??? ??? ??? ?Wo_ImgDb.Comp_No=Wo_Img.Comp_No;
?? ??? ??? ??? ??? ?Wo_ImgDb.Take_Date_=Wo_Img.Take_Date;
?? ??? ??? ??? ??? ?Wo_ImgDb.Ems_No= ems_no;
?? ??? ??? ??? ??? ?Wo_ImgDb.Process_No=Wo_Img.Process_No;
?? ??? ??? ??? ??? ?Wo_ImgDb.Item_No_=Wo_Img.Item_No;
?? ??? ??? ??? ??? ?Wo_ImgDb.Take_Type_=Wo_Img.Take_Type;
?? ??? ??? ??? ??? ?Wo_ImgDb.Qty_=Wo_Img.Qty.ToString();
?? ??? ??? ??? ??? ?Wo_ImgDb.Unit_=Wo_Img.Unit;
?? ??? ??? ??? ??? ?Wo_ImgDb.Pcno=pcsum;

?? ??? ??? ??? ??? ?sql ="insert into EMS_EDI_WO_IMG(WO_NO,COMP_NO,Take_Date,PROCESS_NO,Item_No,Take_Type,Qty,Unit,EMS_NO,PCNO) " +
?? ??? ??? ??? ??? ??? ?? " values('"+Wo_ImgDb.Wo_No +"','"+Wo_ImgDb.Comp_No+"','"+Wo_ImgDb.Take_Date_+"','"+Wo_ImgDb.Process_No+"','"+Wo_ImgDb.Item_No_+"','" +
?? ??? ??? ??? ??? ??? ?? Wo_ImgDb.Take_Type_ +"','"+Wo_ImgDb.Qty_+"','"+Wo_ImgDb.Unit_+"','"+Wo_ImgDb.Ems_No+"','"+Wo_ImgDb.Pcno+"'"+
?? ??? ??? ??? ??? ??? ?? ")";
?? ??? ??? ??? ??? ?Command.CommandText=sql;
?? ??? ??? ??? ??? ?Command.ExecuteNonQuery();

?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?this.m_Actor.ShowCurrentValue(j+1);
?? ??? ??? ??? ??? ?j=j+1;
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?if((j%1000==0) && (j!=0))
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?this.m_Actor.ShowMessage("成功導入1000條工單領料信息數據!");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?Command.Dispose();
?? ??? ??? ?}
?? ??? ??? ?
執行5次,每次執行時都重啟一下數據庫,每次導入8000條數據,執行時間為:
第一次:費時0分2秒609毫秒
第二次:費時0分2秒375毫秒
第三次:費時0分2秒421毫秒
第四次:費時0分2秒562毫秒
第五次:費時0分2秒437毫秒

2)使用存儲過程來插入數據,代碼如下:
?? ??? ??? ??? ?System.Data.OleDb.OleDbCommand Command=conn.CreateCommand();
?? ??? ??? ??? ?Command.CommandTimeout=0;
?? ??? ??? ??? ?Command.Transaction=trans;
?? ??? ??? ??? ?Command.CommandType=CommandType.StoredProcedure;
?? ??? ??? ??? ??? ?Command.CommandText="SP_InsWOImgList";

?? ??? ??? ??? ?System.Data.OleDb.OleDbParameter [] parameters={ ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("wono",OleDbType.VarChar,50)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("tradeCo",OleDbType.VarChar,10)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("takeDate",OleDbType.VarChar,12)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("processNo",OleDbType.VarChar,50)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("itemNo",OleDbType.VarChar,50)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("takeType",OleDbType.VarChar,10)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("qty",OleDbType.VarChar,50)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("unit",OleDbType.VarChar,10)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("pcno",OleDbType.Integer,4)?? ??? ??? ?? ,
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? new System.Data.OleDb.OleDbParameter("emsno",OleDbType.VarChar,12)?? ? };?? ??? ?

?? ??? ??? ??? ?for(int i=0;i<IWo_Img.Count;i++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?Wo_Img=IWo_Img[i] as EMS_EDI_WO_IMG;
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ?Command.Parameters.Clear();
?? ??? ??? ??? ??? ?Wo_ImgDb.Wo_No=Wo_Img.Wo_No;
?? ??? ??? ??? ??? ?Wo_ImgDb.Comp_No=Wo_Img.Comp_No;
?? ??? ??? ??? ??? ?Wo_ImgDb.Take_Date_=Wo_Img.Take_Date;
?? ??? ??? ??? ??? ?Wo_ImgDb.Ems_No= ems_no;
?? ??? ??? ??? ??? ?Wo_ImgDb.Process_No=Wo_Img.Process_No;
?? ??? ??? ??? ??? ?Wo_ImgDb.Item_No_=Wo_Img.Item_No;
?? ??? ??? ??? ??? ?Wo_ImgDb.Take_Type_=Wo_Img.Take_Type;
?? ??? ??? ??? ??? ?Wo_ImgDb.Qty_=Wo_Img.Qty.ToString();
?? ??? ??? ??? ??? ?Wo_ImgDb.Unit_=Wo_Img.Unit;
?? ??? ??? ??? ??? ?Wo_ImgDb.Pcno=pcsum;

?? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ?parameters[0].Value=Wo_ImgDb.Wo_No;
?? ??? ??? ??? ??? ?parameters[1].Value=Wo_ImgDb.Comp_No;
?? ??? ??? ??? ??? ?parameters[2].Value=Wo_ImgDb.Take_Date_;
?? ??? ??? ??? ??? ?parameters[3].Value=Wo_ImgDb.Process_No;
?? ??? ??? ??? ?parameters[4].Value=Wo_ImgDb.Item_No_;
?? ??? ??? ??? ?parameters[5].Value=Wo_ImgDb.Take_Type_;
?? ??? ??? ??? ??? ?parameters[6].Value=Wo_ImgDb.Qty_;
?? ??? ??? ??? ?parameters[7].Value=Wo_ImgDb.Unit_;
?? ??? ??? ??? ??? ?parameters[8].Value=Wo_ImgDb.Pcno;
?? ??? ??? ??? ??? ?parameters[9].Value=Wo_ImgDb.Ems_No;
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?for (int k=0;k<10;k++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?Command.Parameters.Add(parameters[k]);
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?Command.ExecuteNonQuery();

?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?this.m_Actor.ShowCurrentValue(j+1);
?? ??? ??? ??? ??? ?j=j+1;
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?if((j%1000==0) && (j!=0))
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?this.m_Actor.ShowMessage("成功導入1000條工單領料信息數據!");
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?Command.Dispose();
?? ??? ??? ?}
執行5次,每次執行時都重啟一下數據庫,每次導入8000條數據,執行時間為:
第一次:費時0分1秒531毫秒
第二次:費時0分1秒656毫秒
第三次:費時0分1秒533毫秒
第四次:費時0分1秒542毫秒
第五次:費時0分1秒551毫秒


存儲過程執行/程序中拼sql語句執行

7813/12404=62.99%
程序中拼sql語句執行/存儲過程執行
12404/7813=158.76%

?

最后得出結論,存儲過程的執行效率要比在程序中拼sql語句的執行效率要高。不過如果總的執行時間很長,如10分鐘或是20分鐘,這樣節省的時間
對用戶來說可能沒什么太大的感覺,例如由原來的20分鐘,縮短到12-13分鐘,如果不卡表比照,沒什么感覺的。只有當原來是2個小時的導入時間,
現在只要1個小時多一點,這時才會有明顯的感覺。至于最后使用哪種方式,自己選擇,如果導入時間在20分鐘以內,如果不要求性能與效率,
哪種方式都差不多。
?? ??? ??? ?
?? ??? ????

關于拼sql語句執行與直接執行存儲過程的效率比較


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 俄罗斯午夜影院 | 毛片久久 | 一区二区不卡在线观看 | 国产精品久久久久久久久免费观看 | 免费香蕉视频 | 精品一区二区久久久久久久网精 | 亚洲欧美综合网 | 欧美jizzhd极品欧美 | 亚洲黄色免费在线观看 | 亚洲视频不卡 | 香蕉网站狼人久久五月亭亭 | 亚洲激情视频网站 | 国产精品999在线 | 性一交一乱一视频免费看 | 国产51自产区在线 | 欧美洲精品亚洲精品中文字幕 | 免费一级毛片麻豆精品 | 四虎免费永久网站入口 | 一级毛片高清大全免费观看 | 亚洲欧美在线综合一区二区三区 | 国产伦精品一区二区三区免 | 亚洲精品一区二区久久这里 | 99视频免费看 | 日本欧美中文字幕 | 亚洲视频网 | 97欧美在线看欧美视频免费 | 91在线免费公开视频 | 免费看成人播放毛片 | 91年精品国产福利线观看久久 | 尹人香蕉久久99天天拍欧美p7 | 玖玖国产在线 | 日b黄色 | 天天弄天天操 | 欧美日韩亚洲一区二区三区 | 96精品国产高清在线看入口 | 亚洲欧美日韩高清在线看 | 国产精品久久久久久网站 | www.久久99| 看一级毛片一区二区三区免费 | 爱做久久久久久久久久 | 99久热在线精品视频观看 |