批量插入,使用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的時候會把記錄刪除重新插入,自增主鍵可以看出變化;
該條記錄的其他字段會被清空,使用默認值填入;