Database 从数据库中检索大量数据的游标的替代方法是什么?
通过搜索stackoverflow,我发现了大量谴责在数据库编程中使用游标的答案。然而,我真的不明白替代方案是什么 我正在创建一个程序,从数据库中读取大量行(数十万行),并将它们保存在内存中,以提高性能。我真的无法运行SELECT*FROM表并同时处理所有结果,对吗 我发现最好的方法是使用游标并以增量检索行,例如一次检索10行 有人能启发我吗?我在linux上使用PostgreSQL 9Database 从数据库中检索大量数据的游标的替代方法是什么?,database,postgresql,Database,Postgresql,通过搜索stackoverflow,我发现了大量谴责在数据库编程中使用游标的答案。然而,我真的不明白替代方案是什么 我正在创建一个程序,从数据库中读取大量行(数十万行),并将它们保存在内存中,以提高性能。我真的无法运行SELECT*FROM表并同时处理所有结果,对吗 我发现最好的方法是使用游标并以增量检索行,例如一次检索10行 有人能启发我吗?我在linux上使用PostgreSQL 9 谢谢看一看当您必须处理大量数据时,光标是最好的选择。你也可以使用限制。。抵消。。方法,但这将变得越来越慢,这
谢谢看一看当您必须处理大量数据时,光标是最好的选择。你也可以使用限制。。抵消。。方法,但这将变得越来越慢,这取决于数据量。PostgreSQL对游标没有任何问题,请在处理大量数据时使用它们
SQL Server在游标方面存在问题,MySQL无法处理存储函数之外的游标,这可能是某些dba不喜欢游标的原因。您可以直接使用for循环using record:
do
$$
declare r record;
begin
for r in select product_id, name from products loop
raise notice '% %', r.product_id, r.jname;
end loop;
end$$
我认为最好的方法是使用
COPY
直接将所需数据获取到客户端应用程序
我在使用游标时也没有任何问题。据我所知,游标正在为您保存数据的快照,正式而言,它(和
复制
)是翻阅结果的唯一正确方法,否则在使用限制时。偏移量
可能会导致不一致,因为新插入的记录会更改偏移量 很少需要光标。如果您的逻辑随着前一行的更新而改变,那么您可能需要一个光标
你真的需要为你的问题打开一个光标吗?你能详细说明你想做什么吗?大型数据集是避免使用游标的一个很好的理由,而不是使用游标的理由
您应该尝试进行基于集合的处理。只需定期更新表,使用连接和where过滤器即可
一个简单的更新能否取代光标循环?如果您只是下载数据,为什么不使用select?一次拉取10行不会节省任何内存,因为您的缓存都在内存中
我遗漏了什么吗?我不想更新数据。出于性能原因,我希望将它们保存在数据结构的内存中。所以我想将它们从数据库批量传输到进程。有没有光标替代?