6

PHPの古いドライバーmssqlを使用するコンポーネントがたくさんあります。Microsoftの新しいドライバーSQLSRVに切り替えたいのですが、クエリが非常に遅くなります。

+400000行を処理する多くのプロセスがあります。

これが40000行の私のテストです:

  • testOldDriver_mssql =行40000:1秒
  • testNewDriver_nonPDO =行40000:7秒
  • testNewDriver_PDO =行40000:4秒

ここに私の最大のプロセス(+480 000行):

  • testOldDriver_mssql =行484856:27秒
  • testNewDriver_nonPDO =行484856:120秒
  • testNewDriver_PDO =行484856:47秒
  • testPDO_ODBC =行484856:24秒

新しいドライバーは間違いなく遅いですか?それとも私は何かが足りないのですか?

編集1:

「古いドライバー」とは、非推奨のMSSQLライブラリを意味します(php.net/mssqlを参照)。

新しいドライバーは、Microsoftが直接作成したものです(http://www.microsoft.com/en-us/download/details.aspx?id=20098を参照) 。

私の質問は

SELECT * FROM myTable 
WHERE pdvSaisie IN 
       (SELECT number FROM pdvs WHERE nom LIKE 'ZUEE %') 

ダイレクトquery()を使用します(プリペアドステートメントを使用した場合、プリペアドなしで同じ結果になります)。

編集2:

PDO/ODBCテストを追加しました。驚いたことに、それはより速いです:o

4

3 に答える 3

2

既知のバグ: http://social.msdn.microsoft.com/Forums/en-US/sqldriverforphp/thread/6c4d2c96-6ddc-4872-a5b6-51daddf3a095/

回避策: PDO/ODBC を使用します。

于 2012-08-09T06:14:58.447 に答える
1

ドライバー SQLSRV で同様の問題がありました。私の場合の最終的な解決策は、オプション "TraceOn" を "0" に変更することでした。この構成により、ドライバーのトレースが妨げられました。

詳細については、接続オプションを参照してください。

例:

$connectionInfo = array( "Database"=>"dbName", "TraceOn" => "0");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
于 2015-04-21T01:07:00.133 に答える
1

フェッチを最大 3 回高速化する"MultipleActiveResultSets"=>'0'には、sqlsrv_connect 接続オプションで使用してください。

元:

$db = sqlsrv_connect('127.0.0.1', array('Database'=>'dbname','UID'=> 'sa','PWD'=> 'pass',"CharacterSet" =>"UTF-8","ConnectionPooling" => "1"
                    ,"MultipleActiveResultSets"=>'0'

            ));
于 2014-12-19T20:56:22.983 に答える