PHP - 为什么新的SQLSRV驱动程序比旧的mssql驱动程序慢?

时间:2012-08-06 09:50:13

标签: php sql-server

我使用PHP的旧驱动程序mssql有很多组件。 我想通过微软切换到新的驱动程序SQLSRV,但我的查询速度要慢很多。

我有很多进程处理+400 000行。

以下是 40 000行

的测试
  • 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

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

要快速提取最多3次,请在sqlsrv_connect连接选项中使用"MultipleActiveResultSets"=>'0'

前:

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

            ));

答案 2 :(得分:1)

我遇到了与驱动程序SQLSRV类似的问题,我的最终解决方案是将“TraceOn”选项更改为“0”,此配置会阻止驱动程序的跟踪。

有关详细信息,请参阅Connection Options

示例:

$connectionInfo = array( "Database"=>"dbName", "TraceOn" => "0");
$conn = sqlsrv_connect( $serverName, $connectionInfo);