2016-07-04 107 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

回答

相關問題