6

我有很多组件使用 PHP 中的旧驱动程序 mssql。我想切换到 Microsoft 的新驱动程序 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

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

为了加快获取速度高达 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 回答
1

我的驱动程序 SQLSRV 也有类似的问题,在我的情况下,最终解决方案是将选项“TraceOn”更改为“0”,此配置会阻止驱动程序的跟踪。

有关更多详细信息,请参阅连接选项

例子:

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