gpt4 book ai didi

sql-server - 当使用游标迭代结果集时,是否将所有结果集加载到内存中

转载 作者:行者123 更新时间:2023-12-04 02:26:59 26 4
gpt4 key购买 nike

如果结果集很大,使用游标会节省内存吗?

最佳答案

从技术上讲,当您发出数据库查询时总是涉及游标。您可能正在考虑隐式游标和显式游标之间的区别?

就内存使用而言,重要的不是发出查询的方法,而是获取结果的方式 - 您可以选择批量获取结果(这会使用更多内存,但性能更好、更高效)或单独获取每一行(使用较少的内存,但性能较差且效率较低)。

然而,权衡并不那么简单。如果您有大量并发连接,并且所有查询同时运行,则效率可能比内存使用更重要 - 查询越早完成,数据库就越快可以空闲来服务其他请求。

如果我尝试优化 PL/SQL 的性能和内存使用情况,我喜欢使用 BULK COLLECT,并在循环内设置 LIMIT,例如:

DECLARE
BATCHSIZE CONSTANT INTEGER := 1000;
CURSOR mycursor IS SELECT ...;
TYPE mytabletype IS TABLE OF mycursor%ROWTYPE INDEX BY PLS_INTEGER;
myarray mytabletype;
BEGIN
OPEN mycursor;
LOOP
FETCH mycursor INTO myarray LIMIT BATCHSIZE;
EXIT WHEN myarray.COUNT = 0;
FOR i IN 1..myarray.COUNT LOOP
-- do the processing on myarray(i)
END LOOP;
END LOOP;
CLOSE mycursor;
END;

上面的代码可以轻松调整批量大小以最大化吞吐量,而无需在每个 session 中使用太多内存。

关于sql-server - 当使用游标迭代结果集时,是否将所有结果集加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com