问题描述
嗨,
您能否让我知道如何判断在使用批量收集来获取游标时应该是我们的限制。我在各种博客中读到,使用批量收集并不总是一个好的选择,因为它在少数情况下会降低性能。
请让我知道同样的细节。
提前谢谢...
问候
十八集
您能否让我知道如何判断在使用批量收集来获取游标时应该是我们的限制。我在各种博客中读到,使用批量收集并不总是一个好的选择,因为它在少数情况下会降低性能。
请让我知道同样的细节。
提前谢谢...
问候
十八集
专家解答
没有硬性规定。
* 通常 * 批量收集将比逐行获取更快,但是随着限制的增加,收益水平会降低。例如
所以在我的机器上,80岁以上的我看不到什么好处。有些边界情况可能会起作用。例如,我可能会很幸运,在一个表的 “顶部” 找到10行,而第11行在全表扫描中更远... 所以在这种特殊情况下,10的限制会比20的限制更快,对于第一遍 .... 但是它们通常不值得考虑处理自定义代码。
我的一般做法是:
-如果我 * 知道 * 它的一行 (例如主键查找),则使用select-输入
-如果我 * 知道 * 它是一个小的有限列表 (例如 “国家列表”),我将选择-批量收集
-否则我会用100的取值。
* 通常 * 批量收集将比逐行获取更快,但是随着限制的增加,收益水平会降低。例如
SQL> create table t 2 as select d.* from dba_objects d, 3 ( select 1 from dual connect by level <= 10 ); Table created. SQL> declare 2 type tlist is table of t%rowtype 3 index by pls_integer; 4 r tlist; 5 s timestamp; 6 limit_size int := 5; 7 cursor c is select * from t; 8 begin 9 for i in 1 .. 8 loop 10 s := localtimestamp; 11 open c; 12 loop 13 fetch c bulk collect into r limit limit_size; 14 exit when c%notfound; 15 end loop; 16 close c; 17 dbms_output.put_line('Limit='||limit_size||',time='||(localtimestamp-s)); 18 limit_size :=limit_size * 2; 19 end loop; 20 end; 21 / Limit=5,time=+000000000 00:00:02.866000000 Limit=10,time=+000000000 00:00:02.239000000 Limit=20,time=+000000000 00:00:02.007000000 Limit=40,time=+000000000 00:00:01.855000000 Limit=80,time=+000000000 00:00:01.734000000 Limit=160,time=+000000000 00:00:01.747000000 Limit=320,time=+000000000 00:00:01.758000000 Limit=640,time=+000000000 00:00:01.762000000 PL/SQL procedure successfully completed.复制
所以在我的机器上,80岁以上的我看不到什么好处。有些边界情况可能会起作用。例如,我可能会很幸运,在一个表的 “顶部” 找到10行,而第11行在全表扫描中更远... 所以在这种特殊情况下,10的限制会比20的限制更快,对于第一遍 .... 但是它们通常不值得考虑处理自定义代码。
我的一般做法是:
-如果我 * 知道 * 它的一行 (例如主键查找),则使用select-输入
-如果我 * 知道 * 它是一个小的有限列表 (例如 “国家列表”),我将选择-批量收集
-否则我会用100的取值。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
603次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
591次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
497次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
479次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
464次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
440次阅读
2025-04-08 23:57:08
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
438次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
429次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
371次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
361次阅读
2025-04-15 14:48:05