plsql中如果我定义一个游标,然后打开这个游标,然后loop循环把查询出来的数据全部插入自己定义的表中
如果我查询出来了非常大量的数据,那这个游标会不会停留在open那里很久,也就是说会很久之后才进入第一个loop里面,有哪位高手能指点一下吗?...
如果我查询出来了非常大量的数据,那这个游标会不会停留在open那里很久,也就是说会很久之后才进入第一个loop里面,有哪位高手能指点一下吗?
展开
2个回答
展开全部
open那不会浪费太多时间。需要的时间就是两部分。
1.定义游标,获取结果集的时候。---这个时间主要看你的sql查询需要多长时间。
2.Loop的时候。----这个就是运行的时间了。
不过建议大量数据的话不要用游标来处理。
游标的处理速度是很慢的。效率比较低。最好能做批量处理。
我以前用游标做过数据处理,我那个业务逻辑比较复杂,每小时大概只能处理几十万数据。效率太低了。后来我都改成多步骤,用insert into select 。。from 这类的写法去处理,能差百八十倍的速度。
1.定义游标,获取结果集的时候。---这个时间主要看你的sql查询需要多长时间。
2.Loop的时候。----这个就是运行的时间了。
不过建议大量数据的话不要用游标来处理。
游标的处理速度是很慢的。效率比较低。最好能做批量处理。
我以前用游标做过数据处理,我那个业务逻辑比较复杂,每小时大概只能处理几十万数据。效率太低了。后来我都改成多步骤,用insert into select 。。from 这类的写法去处理,能差百八十倍的速度。
追问
批量处理是指定义plsql记录表进行批量处理吗?
insert into select 。。from这类写法是不是能减少sql查询时间呢?
我的主要耗时是在sql查询里面,我用的是动态sql(没办法),而且里面有几个子查询,还有分组,求和,什么的,花了很多时间,所以这个查询方面不知道有什么方法能减少一些时间,感觉半天才进loop里面
追答
insert into 。。。select * from 这种写法,比游标的逐条处理要快百八十倍。。数据量越大,效率差距越大。
嗯。你意思半天才进loop意思就是获取游标里面数据的时候检索消耗的时间太长呗。这个只能根据你实际的情况去进行SQL优化了。比如说建相关索引什么的,这块就和游标本身无关了。
你游标里存放的数据量大概有多大?反正我建议如果超过1000,就不要使用游标处理了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询