sql >> データベース >  >> RDS >> Mysql

PDO::fetchAllとPDO::fetchのループ

    200kのランダムレコードを持つ小さなベンチマーク。予想どおり、fetchAllメソッドは高速ですが、より多くのメモリを必要とします。

    Result :
    fetchAll : 0.35965991020203s, 100249408b
    fetch : 0.39197015762329s, 440b
    

    使用したベンチマークコード:

    <?php
    // First benchmark : speed
    $dbh = new PDO('mysql:dbname=testage;dbhost=localhost', 'root', '');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = 'SELECT * FROM test_table WHERE 1';
    $stmt = $dbh->query($sql);
    $data = array();
    $start_all = microtime(true);
    $data = $stmt->fetchAll();
    $end_all = microtime(true);
    
    $stmt = $dbh->query($sql);
    $data = array();
    $start_one = microtime(true);
    while($data = $stmt->fetch()){}
    $end_one = microtime(true);
    
    // Second benchmark : memory usage
    $stmt = $dbh->query($sql);
    $data = array();
    $memory_start_all = memory_get_usage();
    $data = $stmt->fetchAll();
    $memory_end_all = memory_get_usage();
    
    $stmt = $dbh->query($sql);
    $data = array();
    $memory_end_one = 0;
    $memory_start_one = memory_get_usage();
    while($data = $stmt->fetch()){
      $memory_end_one = max($memory_end_one, memory_get_usage());
    }
    
    echo 'Result : <br/>
    fetchAll : ' . ($end_all - $start_all) . 's, ' . ($memory_end_all - $memory_start_all) . 'b<br/>
    fetch : ' . ($end_one - $start_one) . 's, ' . ($memory_end_one - $memory_start_one) . 'b<br/>';
    


    1. MariaDBでUNIONを使用する場合の「エラー1222(21000):使用されるSELECTステートメントの列数が異なる」を修正

    2. Oracleクエリに日付パラメータを追加します

    3. ClusterControlを使用してPostgreSQLシャーディングを構成する方法

    4. Oracleの日付にAD/BCインジケーターを追加する方法