关于oracle insert的效率问题
我需要insertintoaselectxx1,xx2,xx3,decode(xx4,xx5,xx6)frombwhereb.xx1in(xx,xxx)现在b表中的数据有...
我需要insert into a select xx1,xx2,xx3,decode(xx4,xx5,xx6) from b where b.xx1 in (xx,xxx)
现在b表中的数据有1000多万,xx1是索引,可是我执行这条insert 要用6个小时。。。我该怎么办才能让这个快一些?数据库是归档模式。
请高手指点。我的财富值用完了,不好意思。 展开
现在b表中的数据有1000多万,xx1是索引,可是我执行这条insert 要用6个小时。。。我该怎么办才能让这个快一些?数据库是归档模式。
请高手指点。我的财富值用完了,不好意思。 展开
2个回答
展开全部
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表改名即可
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表改名即可
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询