PHP odbc_fetch_row非常慢

时间:2014-03-18 21:03:46

标签: php sql-server odbc

总之,在PHP中使用带有SQL Server 2012的odbc_fetch_row()时,需要17秒才能循环525个结果。

环境:

  • Mac OS X 10.9
  • Apache(与os x一起提供)
  • 来自http://php-osx.liip.ch/的PHP 5.5.8
  • ODBC驱动程序:实际SQL Server
  • SQL Server 2012

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??)

1 个答案:

答案 0 :(得分:10)

我还使用php odbc从MSSQL数据库中获取结果时遇到了一些严重的性能问题。 对我来说,解决方案是在连接中指定游标类型:

$con = odbc_connect([dsn], [user], [pwd], SQL_CUR_USE_ODBC)