簡體   English   中英

Zend_Db和無緩沖查詢

[英]Zend_Db and unbuffered queries

我有一個運行時間很長的查詢,我嘗試通過一個無緩沖的pdo語句來獲取(請參見下面的代碼)。 但是,當我無緩沖地“執行”查詢或執行“ fetchAll”時,計時(也請參見下文)並沒有真正改變...我認為無緩沖的只是執行查詢並給我一個游標?

get_db函數返回一個Zend_Db對象。

  l('Start 1');

  $sql = get_db('ATO')->select()
                       ... Big query...
                       ->assemble();

  l('Assembled');

  get_db('APNS')->query($sql)->fetchAll();

  l('All fetched... Going again!');

  $PDOStatement = get_db('ATO')->getConnection()
                                ->prepare($sql,
                          array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false));

  l('prepared');

  if ( $PDOStatement->execute() === false ) {
    l(':(');
    exit(1);
  }

  l('fetching');

  while ( ($PDOrow = $PDOStatement->fetch()) !== false ) {
  }

  l ('all done');

  function l($t) {
    static $start = null;
    if ( $start === null ) {
      $start = microtime(true);
    }
    echo sprintf("[%0.5f] %s\n", microtime(true) - $start, $t);
  }

和時間:

[0.00000] Start 1
[0.02262] Assembled
[214.69091] All fetched... Going again!
[214.69105] prepared
[417.01584] fetching
[420.55217] all done

如您所見,獲取所有和未緩沖的變體幾乎沒有區別。

我在這里可能做錯了什么?

謝謝!

您錯了,因為您嘗試使用無緩沖查詢來加快速度。

  1. 緩沖查詢將所有結果提取到PHP內存中。
  2. 具有無緩沖的結果將保留在服務器上,直到將其提取。

每種方式都有其優點和缺點,但與時間的關系微弱。

閱讀手冊緩沖和非緩沖查詢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM