总之,在PHP中使用带有SQL Server 2012的odbc_fetch_row()时,需要17秒才能循环525个结果。
环境:
odbc.ini文件内容:
[ODBC Data Sources]
theDb = Actual SQL Server
[theDb]
Driver = /Library/ODBC/Actual SQL Server.bundle/Contents/MacOS/atsqlsrv.so
Description = Production SQL Server
Server = [some address]
Database = [some db]
ServerName = theDb
host = [some address]
PHP测试页:
<?php
$userID="[user]";
$password="[password]";
$driverSourceString="theDb";
$dbc = odbc_connect($driverSourceString, $userID, $password);
$time_start=0;
function startTimer(){
global $time_start;
$time_start = microtime(true);
}
function printTimer(){
global $time_start;
$time_end = microtime(true);
$time = $time_end - $time_start;
echo sprintf('%f', $time);
echo " Seconds";
}
?>
<html>
<head>
<title>SQL TEST</title>
</head>
<body>
<pre>
Connection:
<?php
startTimer();
$dbc = odbc_connect($driverSourceString, $userID, $password);
printTimer();
?>
Query:
<?php
startTimer();
$query = "SELECT m.firstName + ' ' + m.lastName AS username FROM models m ORDER BY lastName ASC";
$result = odbc_exec($dbc, $query);
printTimer();
?>
Fetchrow:
<?php
startTimer();
while(odbc_fetch_row($result))
{
//do nothing
}
printTimer();
?>
</pre>
</body>
</html>
输出:
Connection:
0.000129 Seconds
Query:
0.061282 Seconds
Fetchrow:
15.795249 Seconds (WHY SO LONG??)
答案 0 :(得分:10)
我还使用php odbc从MSSQL数据库中获取结果时遇到了一些严重的性能问题。 对我来说,解决方案是在连接中指定游标类型:
$con = odbc_connect([dsn], [user], [pwd], SQL_CUR_USE_ODBC)