什么影响odbc_fetch_array()的性能

时间:2016-06-30 14:04:50

标签: php sql-server

我有一个运行查询的php页面,显示大约100-200个结果。

$sql = odbc_prepare($connection,$stmt);
odbc_execute($sql);
while ($row = odbc_fetch_array($sql) {
    echo $row['col1'].$row['col2'].$row['col3']."<br>";
}

运行大约需要15秒,大部分时间似乎都在循环内。查询本身有多个连接,我原本认为这会减慢odbc_execute()函数,而不是odbc_fetch_array()。

当我调用odbc_fetch_array()时到底发生了什么?什么影响表现?查询的复杂性?返回的数据量? SQL服务器的内存/ CPU? PHP服务器的内存/ CPU?

2 个答案:

答案 0 :(得分:1)

您可以通过在cursor_type中指定odbc_connect来提高性能,这将使odbc获取更快。

$ conn = odbc_connect($ dsn,$ user,$ pass,SQL_CUR_USE_ODBC)

正如我所看到的,你正在经历一个循环,100-200结果意味着 - odbc查询odbc_fetch_array()正在运行100-200次。 (可选)您可以使用具有getAll()方法的http://adodb.org/dokuwiki/doku.php?id=v5:userguide:learn_abstraction:basic_query一次性返回所有数据而不循环。

答案 1 :(得分:1)

每行联系服务器是导致延迟的原因,而不是查询本身的复杂性。如果PHP服务器和SQL服务器在同一个网络上,它就不会那么糟糕,但如果它们在通过互联网或VPN连接的不同机器上,它就会变得明显。

odbc_ *函数无法一次获取所有行。我选择的选项是重新编写我的代码以使用PDO和PDO-&gt; fetchall()来一次获取所有行。

相关问题