5
随着尽管我取单行下面的代码 - 整个数据集被下载(这需要几秒钟):如何使PDO(pdo_pgsql)懒洋洋地读取行
$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标志):http://stackoverflow.com/qu estions/14462156/php-pdofetch-lazy-not-creating-object-variable-names-as-they-are-access-from和PHP doc:http://php.net/manual/en/pdostatement.fetch.php – pah
@threadp'FETCH_LAZY'是一个误导性的名字,它不会做它听起来应该的:-D – zerkms
对,我刚刚从你的答案中得到了答案:)谢谢 – pah