Php 什么影响odbc_fetch_array()的性能

Php 什么影响odbc_fetch_array()的性能,php,sql-server,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>"; } $sql=odbc\u prepare($connection,$stmt); odbc_执行($sql)

我有一个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>";
}
$sql=odbc\u prepare($connection,$stmt);
odbc_执行($sql);
while($row=odbc\u fetch\u数组($sql){
echo$row['col1'].$row['col2'].$row['col3'].“
”; }
运行大约需要15秒,大部分时间似乎都在循环中。查询本身有多个连接,我原以为这会减慢odbc\u execute()函数的速度,而不是odbc\u fetch\u array()


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

您可以通过在
odbc\u connect
中指定
游标类型来提高性能,这将使odbc获取更快

$conn=odbc\u connect($dsn、$user、$pass、SQL\u CUR\u USE\u odbc)


正如我所看到的,您正在经历一个循环,100-200个结果意味着-odbc查询
odbc\u fetch\u array()
正在运行100-200次。您可以选择使用
一次返回所有数据而不进行外循环的方法。

导致延迟的原因是每行联系服务器,而不是查询本身的复杂性。如果PHP服务器和SQL服务器在同一个网络上,情况不会那么糟,但如果它们在通过internet或VPN连接的不同机器上,则会引起注意可敬的


odbc_*函数没有一次获取所有行的选项。我选择的选项是重新编写代码,使用PDO和PDO->fetchall()一次获取所有行。

exec()调用是多个连接将产生影响的地方。一旦exec调用返回,db就已经完成查询并准备返回结果行。除非结果中有大量blob,否则fetch调用应该是相当轻量级的,不会使事情陷入困境。看起来我遇到的主要问题是我的SQL server和PHP服务器位于通过VPN连接的不同建筑物中,这意味着每个odbc_fetch_array()调用都是通过internet访问服务器的。最后我使用了PDO,这与您的ADO建议非常相似,fetchAll()函数的工作速度远快于获取单个行。