2017-10-31 9 views
0

私はsqlsrvを使用してSQL Serverデータベースからデータをフェッチしています。このデータベースは、PHPの別のサーバー(ローカルネットワーク外)にあります。PHP5 - SQLSRV too slow

多くのUNIONを使用するクエリを使用しています。 Management Studioでクエリを実行すると、すべてのデータを取得するのに約4〜5秒かかります...しかし、PHPとsqlsrvを使用すると約57秒かかります!

 $connectionInfo = array("Database"=>$db, "UID"=>$u, "PWD"=>$p, "CharacterSet"=>"UTF-8"); 
    $conn = sqlsrv_connect($serverName, $connectionInfo); 
    $errors = sqlsrv_errors(SQLSRV_ERR_ERRORS); 
    $tsql = $query; 
    $stmt = sqlsrv_query($conn, $tsql, array(), array("Scrollable" => 'static')); 
    $json = array(); 
      do { 
       while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { 
        $json[] = $row;     
       } 
       } while (sqlsrv_next_result($stmt)); 
    echo json_encode($json);  

私が間違ってやっているの任意のアイデア:

これは私が使用しているコードはありますか?

+0

どのくらいのデータを送受信していますか? DBがローカルでない場合は、時間がかかることが予想されます。どちらかのデータを送受信しないでください。sprocや他のメソッドを使ってDBを実行したり、php exeを使ってDBをマシンに移動したりしてください。 – atoms

+0

時間がDB処理時間に基づいているかどうかを確認する必要があります(より良いクエリをコーディングし、インデックスを設定し、DBサーバーのリソースをチェックする必要があります)...またはネットワーク転送時間(多くのデータ、ネットワーク競合、...)。 – Nic3500

答えて

0

は、このコードを試してみてください。

$this->stmt = sqlsrv_query($this->conn, $sql, null, array("Scrollable" => SQLSRV_CURSOR_FORWARD)); 

SQLSRV_CURSOR_STATICは、あなたが任意の順序で行にアクセスが、データベースの変更が反映されませんできます。 staticは、SQLSRV_CURSOR_STATICの省略形です。

ご覧ください:https://docs.microsoft.com/en-us/sql/connect/php/cursor-types-sqlsrv-driver

+1

いくつかの説明を加えてください –

+0

私はよく英語を話すことができません。どうぞご覧くださいhttps://docs.microsoft.com/en-us/sql/connect/php/cursor-types-sqlsrv-driver – yjh

+1

これは、SQLSRV_CURSOR_STATIC \tと書かれていますが、どのような順序で行にもアクセスできますが、データベース。 staticは、SQLSRV_CURSOR_STATICの省略形です。 – yjh