使用以下代码即使我获取单行 - 下载整个数据集(需要几秒钟):
$query = 'SELECT * FROM xxx WHERE id > :position ORDER BY id';
$stmt = $db->prepare($query);
$stmt->execute([
':position' => $position,
]);
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
break;
}
我试图在PDO中找到一个选项,可以根据需要(或通过合理的批次)获取行,但是没有这样做,至少我在PDO文档中找不到它。
给定查询的Postgresql能够根据0.28ms
为EXPLAIN ANALYZE
中的第一行提供服务。
我的目标是尽可能快地开始处理行,即使进一步批量的行会带来一些网络开销。
我如何确定它获取所有行:
break
需要相同的时间或迭代整个数据集tcpdump
捕获了流量并检查它是否获取了所有行。所以,问题是:是否有可能在需求模式下逐行(或一些合理的小批量)获取PDO
?
答案 0 :(得分:3)
我找到了答案:
$stmt = $db->prepare($query, [\PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL]);
因此必须使用\PDO::CURSOR_SCROLL
选项
参考文献: