MERGE INTO ADMIN.JHJ_SBJLXX t1
USING (select count(*) c from JHJ_SBJLXX t2 where t2.pjh='9B35882F2F' ) x ON (x.c > 0)
when matched then
update set t1.ckh='4013501' , t1.jhsj=to_date('2019-05-14 16:41:37', 'yyyy-mm-dd hh24:mi:ss') , t1.YWBJSJ='' , t1.SFJH='1' where t1.pjh='9B35882F2F'
when not matched then
insert (t1.sbmc, t1.sbbh, t1.xzqh, t1.xzqhmc, t1.sxbm, t1.sxmc, t1.pjh, t1.jhrxm, t1.jhrzjhm, t1.jhrlxdh, t1.qhsj, t1.sfjh, t1.jhsj, t1.ckh, t1.bmmc, t1.ywlx, t1.ywbjsj) VALUES ('2樓排號機', '2L01', '420105007000', '湖北省武漢市漢陽區五里墩街辦事處', '99', '不動產解押', '9B35882F2F', '李航', '412823199212103659', '',to_date( '2019-05-14 16:41:00', 'yyyy-mm-dd hh24:mi:ss') , '1', to_date('2019-05-14 16:41:37', 'yyyy-mm-dd hh24:mi:ss'), '4013501', '公安局', '0','')
下面是我的代碼,用excutemany進行批量插入,總共1000條資料,有時候用了10分鐘,有時30分鐘都完成不了,這個是為什么啊。
jh_insert_sql="""MERGE INTO ADMIN.JHJ_SBJLXX t1
USING (select count(*) c from ADMIN.JHJ_SBJLXX t2 where t2.pjh=:pjh1 and t2.xzqh=:xzqh1) x ON (x.c > 0)
when matched then
update set t1.ckh=:ckh1 , t1.jhsj=to_date(:jhsj1, 'yyyy-mm-dd hh24:mi:ss') , t1.YWBJSJ=:ywbjsj1 , t1.SFJH=:sfjh1 where t1.pjh=:pjh
when not matched then
insert (t1.sbmc, t1.sbbh, t1.xzqh, t1.xzqhmc, t1.sxbm, t1.sxmc, t1.pjh, t1.jhrxm, t1.jhrzjhm, t1.jhrlxdh, t1.qhsj, t1.sfjh, t1.jhsj, t1.ckh, t1.bmmc, t1.ywlx, t1.ywbjsj) VALUES (:sbmc, :sbbh, :xzqh, :xzqhmc, :sxbm, :sxmc, :pjh, :jhrxm, :jhrzjhm, :jhrlxdh,to_date(:qhsj, 'yyyy-mm-dd hh24:mi:ss') , :sfjh, to_date(:jhsj, 'yyyy-mm-dd hh24:mi:ss'), :ckh, :bmmc, :ywlx,:ywbjsj)"""
count += 1
# 每次插入300條資料
if count >= 30:
try:
hyzw_mysql_cursor.executemany(jh_insert_sql, insert_jh_list)
hyzw_mysql_conn.commit()
print('執行'+str(3*num)+'條')
except Exception as e:
print(e)
print(insert_jh_list)
insert_jh_list = []
count = 0
num+=1
if count > 0:
hyzw_mysql_cursor.executemany(jh_insert_sql, insert_jh_list)
hyzw_mysql_conn.commit()
uj5u.com熱心網友回復:
你這是批量執行merge而不是插入。先試著每300條執行executemany將資料插入到臨時表里,然后用一個merge處理300條資料。
uj5u.com熱心網友回復:
之前我也遇到相似的問題,我在測驗環境中跑了一個多小時,還是沒有結果;但是在生產環境中十分鐘就結束了。我分析的原因就是,這個與服務器的配置有關。快取資源不足,會導致IO次數增多,也就會影響執行效率了,你按照這個思路考慮下,看看你的問題是怎么樣的?
uj5u.com熱心網友回復:
merge into這條陳述句就是pjh存在就更新,不存在就插入,和insert into和update的語法是一樣的就。
uj5u.com熱心網友回復:
主要是我的測驗的資料庫表之前存盤是空的,生產環境的表之前有80w條資料,
uj5u.com熱心網友回復:
庫配置不同,運行速度可以差很遠很遠很遠遠遠遠uj5u.com熱心網友回復:
隨著目標表越來越大,merge的速度也會隨之變慢,表上的索引越多,越會影響資料的插入速度。如果希望merge的速度保持一定,磁區插入是一個可以考慮的方案,當然每個磁區的資料量要穩定。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/43210.html
標籤:開發
上一篇:oracle安裝
下一篇:jdbc連接問題
