Mysql批量插入更新

批量插入,使用MyBatis批量語法:

<insert id="insertBatch" parameterType="list">
    insert into tbl1 (a, b, c)
    values
    <foreach collection="list" item="obj" separator=",">
        (#{obj.a,jdbcType=TIMESTAMP}, #{obj.b,jdbcType=VARCHAR}, #{obj.c,jdbcType=VARCHAR})
    </foreach>
</insert>

使用臨時表進行批量更新,其中的a,b作爲唯一索引:

insert into tbl1  (a, b , c,d,e)
SELECT a, b ,c,d,e from tbl1_temp s 
on DUPLICATE key update c = s.c, d = s.d, e=s.e

3萬條記錄,第一次插入的時候1.5秒,第二次更新的時候2.5秒;

而且不會影響到該條記錄的其他字段;

REPLACE into tbl1  (a, b , c,d,e)
SELECT a, b ,c,d,e from tbl1_temp s 

3萬條記錄,第一次插入的時候2.5秒,第二次更新的時候4.5秒;

REPLACE的時候會把記錄刪除重新插入,自增主鍵可以看出變化;

該條記錄的其他字段會被清空,使用默認值填入;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章