我有一个运行查询的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?
答案 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()来一次获取所有行。