【发布时间】:2016-11-06 15:31:46
【问题描述】:
使用以下代码,即使我获取单行 - 下载整个数据集(需要几秒钟):
$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 能够按照 EXPLAIN ANALYZE 提供 0.28ms 中的第一行。
我的目标是尽可能快地开始处理行,即使更多批次的行会带来一些网络开销。
我如何确定它获取所有行:
- 间接:在第一行之后
break需要相同的时间或遍历整个数据集 - 我使用
tcpdump捕获了流量,并检查了它是否获取了所有行。
那么,问题来了:是否可以让PDO以按需模式逐行(或一些合理的小批量)获取?
【问题讨论】:
-
我不确定,但你有没有看到这个(PDO::FETCH_LAZY 标志):stackoverflow.com/questions/14462156/… 和 PHP 文档:php.net/manual/en/pdostatement.fetch.php
-
@threadp
FETCH_LAZY是一个误导性的名称,它并没有做它应该做的事情:-D -
对,我刚从你的回答中得知 :) 谢谢
标签: php postgresql pdo