【发布时间】:2013-08-05 10:15:58
【问题描述】:
假设以下查询:
SELECT * FROM table;
DBMS 会在获取第一行后立即给我还是先获取所有行(将它们保存在某种缓冲区中)然后一次给我所有行?
如果我的问题不清楚。假设table 中的行数使得 DBMS 将花费 60 分钟来获取所有行。 DBMS 会在 60 分钟内逐步返回行,还是我必须等待 60 分钟才能收到任何数据?
【问题讨论】:
-
嗯...有趣。您的测试表明了什么?
-
@AndrewMorton 我的测试表明它使用了某种缓存。另外,我相信使用缓存方法处理事务会更容易。但是,到目前为止,我只用
psql进行了测试,所以我不知道这种行为是由于psql还是由于dbms。 -
psql 的行为与典型的简单应用程序相同。它基于 libpq,所以 libpq 在客户端收集内存中的所有数据,当查询完成后,将控制权返回给客户端。您可以通过将 FETCH_COUNT 设置为 1000(获取 1000 行后返回给客户端)重新定义它以使用游标 - \set FETCH_COUNT 1000
-
在查询继续搜索时,如果有一个除 FIRST ROWS 指令之外的选项来立即预览部分结果,那肯定会很好。尤其是当用户知道查询可能只从大表中返回很少的结果时!请参阅我的相关@987654321@。
标签: sql postgresql select