【发布时间】:2017-10-31 12:24:53
【问题描述】:
我正在使用 sqlsrv 从 sql server 数据库中获取数据。该数据库位于 PHP 的不同服务器中(本地网络外)。
我使用包含大量 UNION 的查询。如果我在 Management Studio 上运行查询,获取所有数据大约需要 4-5 秒...但如果我使用 PHP 和 sqlsrv 大约需要 57 秒!
这是我正在使用的代码:
$connectionInfo = array("Database"=>$db, "UID"=>$u, "PWD"=>$p, "CharacterSet"=>"UTF-8");
$conn = sqlsrv_connect($serverName, $connectionInfo);
$errors = sqlsrv_errors(SQLSRV_ERR_ERRORS);
$tsql = $query;
$stmt = sqlsrv_query($conn, $tsql, array(), array( "Scrollable" => 'static' ));
$json = array();
do {
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$json[] = $row;
}
} while ( sqlsrv_next_result($stmt) );
echo json_encode($json);
知道我做错了什么吗?
【问题讨论】:
-
您发送和检索多少数据?如果数据库不是本地的,您会期望它需要更长的时间。要么不发送/返回尽可能多的数据,使用 sproc 或其他方法在 DB 上执行,要么将 DB 移动到打开 php exe 的机器上。
-
您必须查看持续时间是否基于数据库处理时间(因此您必须编写更好的查询、设置索引、检查数据库服务器资源……)或网络传输时间(到很多数据,很多结果,网络争用,...)。
-
我也有类似的问题。为了让 PHP 在 Linux 上工作,我必须安装
php7.2-sybase。当我使用 Microsoft SQL 工具时,我得到了非常快的响应时间。当我使用 PHP 时,我会遇到大量延迟和超时。所以要么 PHP 库坏了,要么驱动程序坏了。我认为其他两个 cmets 忽略的地方是它使用 Microsoft 工具的速度很快。不是大包,网络问题等等。你有没有设法解决这个问题?
标签: php sql-server sqlsrv