0

我有一个 PHP 页面,它在查询 MSSQL 数据库时速度很慢。我正在使用最新的 PHP 和标准 SQL odbc 驱动程序连接到数据库。访问页面时,我的 sql profiler 发疯了。然后显示查询

exec sp_cursorfetch 180150003,2,1,1
go

在 finally 之前执行大约 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>

知道我的代码是如何导致这种性能停滞的吗?

4

2 回答 2

1

看起来 odbc_exec 函数在后台使用游标。我不完全确定谁认为这是个好主意,但事实并非如此。游标是出了名的糟糕表现,通常是一个非常糟糕的主意,除非你根本没有其他办法。

一种选择是更改您的odbc_connect呼叫以拥有SQL_CUR_USE_ODBC标志。更好的选择是使用本机驱动程序。

http://cct.me.ntut.edu.tw/ccteducation/chchting/aiahtm/computer/phphelp/function.odbc-connect.php.htm

于 2013-10-08T16:21:23.583 回答
0

尝试测量连接或查询执行出现问题的时间如果连接出现问题,则将 MSSQL 名称更改为 IP

$con = odbc_connect('Hesk','Trace_user','*******');

出于某种原因,我的 linux 机器解析速度很慢。

$con = odbc_connect('192.168.10.10','Trace_user','*******');
于 2017-11-28T15:35:29.380 回答