- 主题:MyBatis的ExecutorType.BATCH模式的插入操作在Oracle下不生效!
插入操作,使用MyBatis的ExecutorType.BATCH模式
在MySQL和PGSQL下,都生效 插入1万条耗时3秒
#1
在Oracle下,不生效 没有批量执行,而是一条一条执行的 插入1万条耗时66秒
虽然设置的ExecutorType.BATCH模式,实际是以ExecutorType.SIMPLE模式执行。
#2
将SqlSession改为SqlSessionTemplate,好像又生效了,但是带来另外一个问题:
插入操作后面的删除操作又报错
Cannot change the ExecutorType when there is an existing transaction
#3
将删除操作也改为ExecutorType.BATCH模式,好像不报错了,但是
执行到方法的最后一句 接口都没有返回 前端调用超时报错。
--
修改:townhope FROM 223.104.74.*
FROM 223.104.74.*
插入1万条数据到oracle
方案一:
insert into
<foreach>
select #{} as ...
</foreacn>
这里先一万次select生成一个临时表,然后将临时表整体插入。这种方式速度最快。
但是,这样会产生一个一万行的超长SQL,公司规范不允许。
方案二:
使用oracle的 insert all 语句
insert all
<foreach>
into tbl(...) values(...)
</foreacn>
这个速度也很快,但是没有方案一快。
这样也会产生一个一万行的超长SQL,公司规范不允许。
方案三:使用MyBatis的ExecutorType.BATCH模式
BATCH模式会产生一个一个的单行的单个SQL 然后一次批量执行。不会产生一个1万行的单个SQL。
但是 这个模式在oracle下不生效 如之奈何
【 在 townhope 的大作中提到: 】
: 插入操作,使用MyBatis的ExecutorType.BATCH模式
: 在MySQL和PGSQL下,都生效 插入1万条耗时3秒
: #1
: ...................
--
修改:townhope FROM 223.104.74.*
FROM 223.104.74.*
你不会每个批次数量少一点?非要一口气插入完?
【 在 townhope (希望镇) 的大作中提到: 】
: 插入1万条数据到oracle
:
: 方案一:
:
--
FROM 1.202.22.*
自己没指定好 batch type
【 在 townhope 的大作中提到: 】
: 插入操作,使用MyBatis的ExecutorType.BATCH模式
: 在MySQL和PGSQL下,都生效 插入1万条耗时3秒
: #1
: ...................
--
FROM 117.89.243.*