2016-07-04 29 views
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中的第一行。

而且我的目标是尽可能快地开始处理行,即使进一步批量的行也会带来一些网络开销。

我如何确定它获取所有行:

  1. 间接:它需要同时break第一行后,或在整个数据集进行迭代
  2. 我捕捉到的交通与tcpdump和检查它是否获取所有行。

所以,问题是:是否有可能使PDO在按需模式下逐行(或一些合理的小批量)获取?

+0

我不确定,但你看过这个(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

+0

@threadp'FETCH_LAZY'是一个误导性的名字,它不会做它听起来应该的:-D – zerkms

+0

对,我刚刚从你的答案中得到了答案:)谢谢 – pah

回答