分享高性能批量插入和批量刪除sql語(yǔ)句寫(xiě)法_第1頁(yè)
分享高性能批量插入和批量刪除sql語(yǔ)句寫(xiě)法_第2頁(yè)
分享高性能批量插入和批量刪除sql語(yǔ)句寫(xiě)法_第3頁(yè)
分享高性能批量插入和批量刪除sql語(yǔ)句寫(xiě)法_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、分享高性能批量插入和批量刪除sql語(yǔ)句寫(xiě)法一,技術(shù)水平總能在扯皮和吹毛求疵中得到提高如果從來(lái)不求疵,可能就不會(huì)知道/st廠!=) 不如/f(str != str/ng.Empty)高效、批量插入和刪除的sql語(yǔ)句是要那樣寫(xiě)才執(zhí)彳亍最快、接口和 抽象類(lèi)的區(qū)別不僅是語(yǔ)言層面、原來(lái)權(quán)限管理是要這樣設(shè)計(jì)的、某個(gè)類(lèi)那樣設(shè)計(jì)職責(zé)才更單一更易 于擴(kuò)展本來(lái)前兩篇文章是學(xué)習(xí)cnblogs編輯控件用的,看到跟貼的朋友詢問(wèn)批量插入和批量刪除的問(wèn) 題,決定整理成文和大家分享。我們這里討論的只是普通sql語(yǔ)句如何寫(xiě)更高效,不考慮特殊的用文件中轉(zhuǎn)等導(dǎo)入方式,畢竟 在代碼中調(diào)用sql語(yǔ)句或存儲(chǔ)過(guò)程才更方便。批量刪除很簡(jiǎn)單,

2、大家可能都用過(guò):DELETE FROM TestTable WHERE ID IN (1, 3, 54, 68) -sql2005 下運(yùn)行通過(guò)當(dāng)用戶在界面上不連續(xù)的選擇多項(xiàng)進(jìn)行刪除時(shí),該語(yǔ)句比循環(huán)調(diào)用多次刪除或多條delete語(yǔ) 句中間加分號(hào)一次調(diào)用等方法都高效的多。本文重點(diǎn)講述的是批量插入的寫(xiě)法:sql寫(xiě)法:INSERT INTO TestTable SELECT 1, abc UNION SELECT 2, bcd UNIONSELECT 3, cde -TestTable表沒(méi)有主鍵,ID不是主鍵oracle 寫(xiě)法:INSERT INTO TestTable SELECT 1, abc F

3、rom daul UNION SELECT 2, bcd From daul-TestTable表沒(méi)有主鍵,ID不是主鍵曾經(jīng)測(cè)試過(guò),這種寫(xiě)法插入1000條數(shù)據(jù)比循環(huán)調(diào)用1000次insert或1000條insert語(yǔ)句 簡(jiǎn)單疊加一次調(diào)用要高效得多,大概快20多倍(調(diào)試狀態(tài)不是太準(zhǔn))。其實(shí)很簡(jiǎn)單,就用了個(gè)union (union all也可以),但當(dāng)時(shí)得出測(cè)試結(jié)果時(shí)還是很驚喜的。要得出這個(gè)結(jié)果需要兩個(gè)條件:1、表不能有主鍵或者主鍵是數(shù)據(jù)庫(kù)默認(rèn)的(sql用自動(dòng)遞增列,oracle用序列)2、組合sql語(yǔ)句時(shí)只能直接用字符串連接,不能用參數(shù)化sql語(yǔ)句的寫(xiě)法(就是在組合的sql中 用parm做占位符

4、,再給Command對(duì)象添加Parameter)以上兩條任意一條不滿足,效率的提高都不明顯。另外,sql語(yǔ)句的最大長(zhǎng)度有限制,組合幾千條數(shù)據(jù)寫(xiě)成一條insert語(yǔ)句,可能會(huì)超過(guò)上限,所 以如果有5000條數(shù)據(jù),可以一次insert 1000條,分5次寫(xiě)完(不一定一次1000條最合適,有興 趣的朋友可以研究)。聲明:看了幾位朋友的評(píng)論后發(fā)現(xiàn)自己沒(méi)有敘述清楚上面的兩個(gè)條件并不是說(shuō)這樣做就好,而是說(shuō)當(dāng)應(yīng)用場(chǎng)景滿足這兩個(gè)條件時(shí)才適合用union 的寫(xiě)法當(dāng)時(shí)用這種寫(xiě)法時(shí),是為了解決一個(gè)WinForm程序批量導(dǎo)入手機(jī)號(hào)碼的問(wèn)題,程序給自己人 用,excel文件也是可靠的,不需要考慮sql攻擊。還有一些場(chǎng)景

5、是大量數(shù)據(jù)來(lái)源于通過(guò)Gprs網(wǎng)絡(luò) 連接的專(zhuān)用終端,總之?dāng)?shù)據(jù)來(lái)源是可靠的,還有就是數(shù)據(jù)量很大但不可能巨大。PS:常常遇到一些小技巧或者值得注意的小細(xì)節(jié),沒(méi)有記下來(lái),要等下次再遇到時(shí)才想起來(lái)?,F(xiàn)在 下決心要養(yǎng)成好的工作習(xí)慣,留此文為證。能夠整理成文的要寫(xiě)在項(xiàng)目組開(kāi)發(fā)規(guī)范中,其它的至少要記錄下來(lái)。二,使用mybatis將數(shù)據(jù)批量插入到oracle中,在映射文件中怎么寫(xiě)啊?mybaits 版本,3.1.02.insert into b_agent_info(id,hkgs,userName,custName,office,remark) values(#item.id,#item.hkgs,#item

6、.userName,#item.custName,#item.office,#item.remark)這個(gè)是參考網(wǎng)上的寫(xiě)法寫(xiě)的不過(guò)不支持向oracle中批量插入!不知道有誰(shuí)遇到過(guò)嗎?或者給出解決方法,該怎么解決?.找到一種寫(xiě)法分享:insert intoxxxxtable(hkgs,hkgsjsda,office,asdf,ddd,ffff,supfullName,classtype,agent_type,rem ark)select #item.hkgs,jdbcType= VARCHAR,#item.hkgsjsda,jdbcType= VARCHAR,#item.office,jdbcType=VARCHAR,#item.asdf,jdbcType= VARCHAR,#item.ddd,jdbcType= VARCHAR,#item.ffff,jdbcType= VARCHAR,#item.supfullName,jdbcType=VARCHAR,0, 0,#item.remark,jdbcType= VARCHAR from dual.可以考慮用union all來(lái)實(shí)現(xiàn)批量插入。例如:insert into XX_TABLE(XX,XX,XX)select xx,xx,xx unio

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論