我有一个PHP页面,每当它查询MSSQL数据库时都很慢。我正在使用最新的PHP和标准的SQL odbc驱动程序连接到数据库。访问页面时我的sql profiler变得疯狂。然后显示查询
exec sp_cursorfetch 180150003,2,1,1
go
最终执行约240次
exec sp_cursorclose 180150003
go
发生并显示页面。
这是引起头痛的问题:
<?php
$con = odbc_connect('Hesk','Trace_user','*******');
$Assets = odbc_exec($con, "SELECT AssetName, AssetID From viewAssets ORDER BY [AssetName];");
?>
<table Border ="0" width="100%">
<tr>
<td style="text-align:right" width="150"><?php echo $hesklang ['asset']; ?>: <font class="important"></font>
</td>
<td width = "80%"><select name ="asset">
<option value=""></option>
<?php
while ($row = odbc_fetch_array($Assets))
{
echo '<option value="' . $row['AssetID'] . '"' . (($_SESSION['c_asset'] == $row['AssetID']) ? ' selected="selected"' : '')
. '>' . $row['AssetName']. '</option>';
}
odbc_close($con);
?>
</select></td>
</tr>
</table>
知道我的代码是如何导致这种性能持续的吗?
答案 0 :(得分:1)
看起来odbc_exec函数在引擎盖下使用游标。我不完全确定谁认为这是一个好主意,但事实并非如此。游标是众所周知的糟糕表现者,除非你没有别的办法,否则游戏通常都是一个非常糟糕的主意。
一种选择是将odbc_connect
调用更改为SQL_CUR_USE_ODBC
标记。更好的选择是使用本机驱动程序。