【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】

以下を実行すると数分かかった挙句タイムアウトします。
どう改善すれば表示できるでしょうか?
IIS 5.1
SQL Server 2005
DBへの接続はconfig.aspで設定してあり、以下とは別のスクリプトの時にconfig.aspを読み込んでのDB接続はできています。

<!--#include file="config.asp" -->
<table>
<tr>
<td><span><b>最終10ログイン</b></span></td>
</tr>
<tr>
<td><span>名前</span></td>
<td><span>ログアウト時間</span></td>
</tr>
<%
set rs = Server.CreateObject("ADODB.recordset")
sql="select top 10 * from テーブルA, テーブルB where テーブルB.列A=0 AND テーブルA.Id=テーブルB.列1 order by 列B desc"
rs.open sql,conn,1,1
do while not rs.eof
%>
<tr>
<td height="19" align="middle"><%=rs("列2")%></td>
<td align="middle"><%=rs("列B")%></td>
</tr>
<%
rs.movenext
rs.close
loop
set rs=nothing
%>

A 回答 (2件)

あ、すんません。


今気づきましたが、プログラムバグのようです。

Do-Loop内に、rs.closeがあることはおかしいハズ。
外に出しましょうか。
    • good
    • 0
この回答へのお礼

loopから出してみたら見事瞬時に表示できるようになりました。
とても感謝しております!!
ありがとうございました。

お礼日時:2009/09/16 17:49

なんとなく。


DBログインは完ぺきとしたとき。
試みたいのはコチラです。

1.対象DBが無メンテであるとか、巨大じゃないか?
  ASPからではなく、SQL のToolより以下SQLを投げた時
  きっちり、サクッと結果が返ってくるかどうか?
  「select top 10 * from テーブルA, テーブルB
   where テーブルB.列A=0
   AND テーブルA.Id=テーブルB.列1
   order by 列B desc」

  返ってくる
  -> 問題なし
  返ってこない
  -> SQLチューニングが必要
   1.JOIN文にする。
   2.AとBを結合前に件数を絞るようにする。
   3.インデックスを張る
   4.最適化する

2.レスポンスバッファが大きい場合はIISのResponse BufferLimitを
  大きくする。

以上
    • good
    • 0
この回答へのお礼

回答ありがとうございます
SQL Server Management studioで
select top 10 * from テーブルA, テーブルB
   where テーブルB.列A=0
   AND テーブルA.Id=テーブルB.列1
   order by 列B desc
をしてみたところ正常に表示できました。
まだ5~6名分の情報しかないDBなので巨大ということもないはず。。。
もう少し調べてみますね。

お礼日時:2009/09/04 10:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!