鍍金池/ 問答/Java  Linux  數(shù)據(jù)庫/ 百萬級數(shù)據(jù)oracle入庫?

百萬級數(shù)據(jù)oracle入庫?

如何實現(xiàn)百萬級的數(shù)據(jù)快速入庫,在入庫前判斷對應(yīng)的記錄是否已經(jīng)存在, 如果存在則跳過該條記錄,并且實現(xiàn)入庫序列自增。

回答
編輯回答
妖妖

其實百萬級還好吧,不過這是批量操作數(shù)據(jù),一個比較大的優(yōu)化點是開啟事務(wù),不能每插入一條記錄就提交一次。然后又考慮到如果所有數(shù)據(jù)都在同一個事務(wù)里完成,萬一最后幾條數(shù)據(jù)有點啥問題,然后之前的操作就可能回滾,所有建議比如1w條提交一次事務(wù)。這個就看作者自己控制了

2017年12月12日 16:48
編輯回答
純妹

分三步:

  1. 直接入庫,不做判斷,不生成ID

  2. 刪除重復(fù)數(shù)據(jù)(記得做好索引,提高Oracle查詢性能)

  3. 給剩余的數(shù)據(jù)生成ID

2017年5月30日 18:26
編輯回答
她愚我

如果在入庫的時候嫌慢,你可以分段插入,比如三百萬,你可以一到一百萬的數(shù)據(jù)放一起,一百萬到二百萬放一起,然后多進(jìn)程提交,比如三百萬就開三個進(jìn)程。這其中有很多小技巧,比如樓上說的開事務(wù)最后提交,還有最后生成ID那個思路都挺好的。

2018年3月8日 17:47
編輯回答
咕嚕嚕

如果想速度快,有幾點建議:

1、目標(biāo)表所有主鍵和索引禁用
2、使用sqlldr導(dǎo)入,可以指定從序列生成值,如:SWAP_ID “SEQ_BASE_MATERIELSWAPINFO.NEXTVAL”

根據(jù)以前的測試,100萬記錄應(yīng)該在1-2分鐘內(nèi)完成
導(dǎo)入后啟用主鍵和索引,然后自己寫個刪除重復(fù)記錄的語句

可以參考我以前用sqlldr的記錄:sqlldr記錄

2017年3月6日 23:09
編輯回答
巴扎嘿

百萬級對現(xiàn)在的數(shù)據(jù)庫來說根本不是事,不考慮性能的情況下,單線程跑一個任務(wù),直接插入就好了

if(!存在){
    插入
}
2017年8月21日 22:11