我使用PHP的旧驱动程序mssql有很多组件.我想切换到Microsoft的新驱动程序SQLSRV,但我的查询速度要慢得多.
我有很多进程处理+400 000行.
这是我的40 000行测试:
这是我最大的进程(+48万行):
新驱动程序肯定更慢吗?或者我错过了什么?
编辑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 %')
Run Code Online (Sandbox Code Playgroud)
并使用直接query()(如果我使用准备好的声明,则没有准备和相同的结果).
编辑2:
添加了PDO/ODBC测试.惊喜,它更快:o
我正在尝试访问SQL Server。
更新:作为对下面Clive的评论的回应,我也尝试过重新安装本机ODBC驱动程序,但没有更改。
我已经检查了所有可以找到的问题,一切似乎都井然有序。我的服务器详细信息:
PHP 5.4(通过Plesk管理)
SQL Server 2008 R2 SP2
Windows Server 2008 R2
用于PDO的最新mssql驱动程序位于EXT目录中,并在php.ini中进行了引用:
extension=php_sqlsrv_54_nts.dll
extension=php_pdo_sqlsrv_54_nts.dll
Run Code Online (Sandbox Code Playgroud)
PHPINFO() 给出以下内容:
PDO Drivers: mysql, sqlite, sqlsrv
pdo_sqlsrv support: enabled
sqlsrv support: enabled
Run Code Online (Sandbox Code Playgroud)
我的连接字符串如下所示:
$DSN = "sqlsrv:Server=myDbServer,1433;database=my-dbname";
$PdoOptions = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$sparklyGenericPdoObj = new PDO($DSN,'myUsername','myPasswurde', $PdoOptions);
Run Code Online (Sandbox Code Playgroud)
但这只是给我以下错误,该错误以回旋方式链接到我已经安装的驱动程序(我已经检查了版本号):
PHP致命错误:消息为'SQLSTATE [IMSSP]的未捕获异常'PDOException':此扩展要求Microsoft SQL Server 2012本机客户端ODBC驱动程序与SQL Server通信。访问以下URL,以下载适用于x86的Microsoft SQL Server 2012 Native Client ODBC驱动程序:http : //go.microsoft.com/fwlink/?LinkId=163712 '
在此线程上(报告与我完全相同的错误),是一个解决方案,它表示您可以通过在PHPINFO中查找我上面提到的项目来确认驱动程序已安装:未连接到Sql Server 2012!
任何帮助将非常感激!