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

问题描述:

我有很多使用PHP的旧驱动程序mssql的组件。 我想切换到新的驱动程序SQLSRV由微软,但我的查询是慢很多。PHP - 为什么新的SQLSRV驱动程序比旧的mssql驱动程序慢?

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

这里是我的测试与40 000行

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

这里我最大的过程(+ 480万行):

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

是新的驱动程序肯定比较慢?或者我错过了什么?

编辑1:

通过 “老司机” 我的意思是已过时的MSSQL库(见php.net/mssql)。

新的驱动程序是直接由微软的一个(见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测试。惊讶的是,它的速度更快:○

+0

你究竟由 '老' 和 '新' 是什么意思?我们在讨论什么样的活动?你使用准备好的陈述吗?很多未知... – 2012-08-06 09:56:53

+0

谢谢,我编辑了我的原始消息。 – 2012-08-06 10:08:10

+0

它可能取决于你的测试方法吗?测试数据库可能非常困难,查询缓存和所有的问题都会发生。另外,您是否阅读过性能差异?检查http://af-design.com/blog/2009/01/30/php-mysql-vs-mysqli-database-access-metrics/和“本地”http://stackoverflow.com/questions/171400/这是最快的在php-mysql-or-mysqli – Nanne 2012-08-06 11:44:49

+0

调:在比较日期数据类型(时间戳,等等),这个设置似乎很难,所以我找到的最简单的方法是e ither将它们转换为查询中的日期('CAST(? AS DATE)'),或者在存储过程中确保输入“date”参数是varchar,并允许SQL Server在比较服务器端执行隐式转换。 – AndrewPK 2013-04-05 17:22:21

为了加速取指最多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' 

      )); 
+0

它为我工作。谢谢 – ManiMuthuPandi 2016-01-22 07:15:35

,我与司机SQLSRV类似的问题,在我的情况下,最终的解决办法是改变选项“TRACEON”为“0”,这样的配置防止驾驶员的跟踪。

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

例子:

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

干得好,我会尽力的。 – 2015-04-21 04:31:36