背景:项目中遇到大表关联修改数据,DBA建议通过临时表关联修改;之前是大表 WHERE ID IN (目标ID),通过传入list的ID来操作的。
数据库:Oracle
操作过程中的重要的点:mybatis 建临时表、数据导入到临时表、获取临时表的数据、根据临时表关联修改大表、删除临时表(或者清空临时表数据)
针对以上几点XML脚本示例如下:
建临时表---空表:
<update id="createTmpTable" >
create table ${tableName} (
ID NUMBER NULL ,
NAME VARCHAR2(20) NULL ,
AGE NUMBER(2) NULL
)
</update>
建临时表---即时导入数据:
<update id="createTmpTable">
CREATE TABLE ${tableName} AS
SELECT ID,NAME,AGE
FROM USERS
WHERE
AGE <18
</update>
往临时表内插入数据:
<insert id="insertTmpTable" >
INSERT INTO ${tableName}(
ID,NAME,AGE )
SELECT ID,NAME,AGE
FROM USERS
WHERE
AGE <18
</insert>
删除临时表:
<update id="dropTmpTable" >
DROP TABLE ${tableName} purge
</update>
清空临时表数据:
<update id="truncateTmpTable" >
TRUNCATE TABLE ${tableName}
</update>
根据DBA建议Oracle中最好使用固定表,临时表删除时一定要带purge才能清理干净库日志;
其它操作同正常表一样。
本文介绍在Oracle数据库中处理大表关联修改数据时,如何利用临时表进行优化。详细展示了通过MyBatis创建、导入数据到临时表,关联修改大表,以及清理临时表的具体XML脚本示例。
2万+

被折叠的 条评论
为什么被折叠?



