发布网友 发布时间:2022-04-24 02:10
共2个回答
热心网友 时间:2022-04-08 23:07
1)确定a表是否有索引,触发器,约束,如果有禁用它们。这个很重要。
2)先要确定你查询语句的效率,和返回的记录数
select xx1,xx2,xx3,decode(xx4,xx5,xx6) from b where b.xx1 in (xx,xxx)
你这条查询语句的速度有多快,需要多久才能返回数据,返回多少数据.
如果返回的数据量比较大,你要考虑到a表的extent的分配问题,也就是说你需要提前分配extent给表a
3)你可以将a表所在的表空间在a表插入数据的时候,将a表所在的表空间启用到no logging状态
4)insert /*+append*/ into a select xx1,xx2,xx3,decode(xx4,xx5,xx6) from b where b.xx1 in (xx,xxx) 使用oracle的direct insert语句插入数据提高效率
5)如果数据量非常大,又不想使用上面的方法插入a表的话,
你可以
create table aa as
select xx1,xx2,xx3,decode(xx4,xx5,xx6) from b where b.xx1 in (xx,xxx)
建个aa 表,然后将aa表改名即可
热心网友 时间:2022-04-09 00:25
你先确定这个select语句的执行计划里有没有用上xx1这个索引。然后看看a表有没有触发器追问a表没有触发器。至于执行计划,我还不会看。。。我把执行计划贴出来,你看看。
追答把执行计划贴出看看吧。
另外,a表有多少个索引,太多的话也会影响insert速度,一般需要频繁变动数据的表索引不应建超过5个。