首先要區(qū)分具體情況,雖然表里有幾百萬幾千萬的數(shù)據(jù)量,但是update是同時(shí)update這幾百萬條的數(shù)據(jù)呢?還是只更新其中某幾條? 更新的數(shù)據(jù)量不同,解決方案自然也就有差異。同時(shí)update幾百萬數(shù)據(jù),這個(gè)sql的性能影響在于數(shù)據(jù)庫(kù)會(huì)做回滾段,以便異常時(shí)rollback。由于數(shù)據(jù)量大,性能就浪費(fèi)在回滾段上了。 所以有2個(gè)方案供參考:
蘆山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,蘆山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為蘆山1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的蘆山做網(wǎng)站的公司定做!
1. update時(shí) ,禁用回滾段的生成,跟你前面說的nologing應(yīng)該是一個(gè)意思
2. 分批更新,比如每更新10W條數(shù)據(jù),就執(zhí)行一次commit,這樣效率也會(huì)比原來的要快。
操作步驟如下:
準(zhǔn)備數(shù)據(jù):在excel中構(gòu)造出需要的數(shù)據(jù)
2.將excel中的數(shù)據(jù)另存為文本文件(有制表符分隔的)
3.將新保存到文本文件中的數(shù)據(jù)導(dǎo)入到pl*sql中
在pl*sql中選擇tools--text
importer,在出現(xiàn)的窗口中選擇"Data
from
Textfile",然后再選擇"Open
data
file",
在彈出的文件選擇框中選中保存有數(shù)據(jù)的文本文件,此時(shí)將會(huì)看到data
from
textfile中顯示將要導(dǎo)入的數(shù)據(jù)
4.在configuration中進(jìn)行如下配置
注:如果不將"Name
in
header"勾選上會(huì)導(dǎo)致字段名也當(dāng)做記錄被導(dǎo)入到數(shù)據(jù)庫(kù)中,從而導(dǎo)致數(shù)據(jù)錯(cuò)誤
5.點(diǎn)擊data
to
oracle,選擇將要導(dǎo)入數(shù)據(jù)的表,并在fields中將文本中的字段與表中的字段進(jìn)行關(guān)聯(lián)
6.點(diǎn)擊import按鈕進(jìn)行導(dǎo)入
7.查看導(dǎo)入的數(shù)據(jù)
OK,至此數(shù)據(jù)導(dǎo)入成功。
1、創(chuàng)建測(cè)試表,
createtabletest_date(idnumber,valuedate);
2、插入測(cè)試數(shù)據(jù)
insertintotest_datevalues(1,sysdate);
insertintotest_datevalues(2,sysdate-100);
insertintotest_datevalues(3,sysdate-55);
commit;
3、查詢表中全量數(shù)據(jù),selectt.*,rowidfromtest_datet;
4、編寫sql,更新date類型的value字段值為:2010-12-14;
updatetest_datesetvalue=to_date('2010-12-14','yyyy-mm-dd')whereid=3;
commit;
5、再次查詢sql,可以發(fā)現(xiàn)id為3的value值已變化;selectt.*,rowidfromtest_datet;