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测试。惊讶的是,它的速度更快:○
解决方法:使用PDO/ODBC。
调:在比较日期数据类型(时间戳,等等),这个设置似乎很难,所以我找到的最简单的方法是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'
));
它为我工作。谢谢 – ManiMuthuPandi 2016-01-22 07:15:35
,我与司机SQLSRV类似的问题,在我的情况下,最终的解决办法是改变选项“TRACEON”为“0”,这样的配置防止驾驶员的跟踪。
有关详细信息,请参阅Connection Options
例子:
$connectionInfo = array("Database"=>"dbName", "TraceOn" => "0");
$conn = sqlsrv_connect($serverName, $connectionInfo);
干得好,我会尽力的。 – 2015-04-21 04:31:36
你究竟由 '老' 和 '新' 是什么意思?我们在讨论什么样的活动?你使用准备好的陈述吗?很多未知... – 2012-08-06 09:56:53
谢谢,我编辑了我的原始消息。 – 2012-08-06 10:08:10
它可能取决于你的测试方法吗?测试数据库可能非常困难,查询缓存和所有的问题都会发生。另外,您是否阅读过性能差异?检查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