私の状況でレコードセットオブジェクトを閉じるのに最適な例は次のうちどれですか?
1)
これはループ内のオブジェクトを閉じますが、次に移動するときに新しいオブジェクトを開きます。1000レコードがあった場合、これはオブジェクトを1000回開き、1000回閉じます。これは私が通常行うことです:
SQL = " ... "
Set rs1 = conn.Execute(SQL)
While NOT rs1.EOF
SQL = " ... "
Set rs2 = conn.Execute(SQL)
If NOT rs2.EOF Then
Response.Write ( ... )
End If
rs2.Close : set rs2 = Nothing
rs1.MoveNext
Wend
rs1.Close : Set rs1 = Nothing
2)
この例は私が知りたいことです。ループが終了するまでオブジェクトクロージャ(rs2.close)を保存すると、パフォーマンスが向上または低下しますか?1000のレコードがある場合、これは1000のオブジェクトを開きますが、一度だけ閉じます。
SQL = " ... "
Set rs1 = conn.Execute(SQL)
While NOT rs1.EOF
SQL = " ... "
Set rs2 = conn.Execute(SQL)
If NOT rs2.EOF Then
Response.Write ( ... )
End If
rs1.MoveNext
Wend
rs1.Close : Set rs1 = Nothing
rs2.Close : set rs2 = Nothing
私は自分自身を十分に説明し、それがあまり愚かではないことを願っています。
アップデート
N + 1の問題(2番目のクエリ)を回避するために私のクエリを変更できると思う人には、次のようになります。
これはオンラインフォトライブラリ用です。2つのテーブルがあります。「photoSearch」と「photos」。最初の「photoSearch」には数列しかなく、「photoID」、「headline」、「caption」、「people」、「dateCaptured」、「keywords」など、写真の検索可能なすべてのデータが含まれています。(見出し、キャプション、人物、キーワード)に複数列の全文索引があります。2番目のテーブル「photos」には、すべての写真データが含まれています。高さ、幅、著作権、キャプション、ID、日付など。どちらも500K以上の行があり、見出しとキャプションのフィールドは2000文字以上を返すことがあります。
これは、クエリが現在どのように見えるかとほぼ同じです:(注意事項:全文検索では結合を使用できないため、キーワードは1つの列(「非正規化」テーブル)に格納されます。また、この種の擬似コードはアプリコードです。他の場所にあります-しかし、それは近いです)
SQL = "SELECT photoID FROM photoSearch
WHERE MATCH (headline, caption, people, keywords)
AGAINST ('"&booleanSearchStr&"' IN BOOLEAN MODE)
AND dateCaptured BETWEEN '"&fromDate&"' AND '"&toDate&"' LIMIT 0,50;"
Set rs1 = conn.Execute(SQL)
While NOT rs1.EOF
SQL = "SELECT photoID, setID, eventID, locationID, headline, caption, instructions, dateCaptured, dateUploaded, status, uploaderID, thumbH, thumbW, previewH, previewW, + more FROM photos LEFT JOIN events AS e USING (eventID) LEFT JOIN location AS l USING (locationID) WHERE photoID = "&rs1.Fields("photoID")&";"
Set rs2 = conn.Execute(SQL)
If NOT rs2.EOF Then
Response.Write ( .. photo data .. )
End If
rs2.Close
rs1.MoveNext
Wend
rs1.Close
テストしたところ、大きなテーブル「photos」の代わりに「photoSearch」という独自のテーブルにフルテキストインデックスを設定すると、速度がいくらか向上したように見えました。「photoSearch」テーブルは追加しませんでした。すでに存在していました。これは私のアプリではありません。2つのテーブルを結合して2番目のクエリを失おうとすると、インデックス作成がすべて失われ、非常に長い時間がかかるため、フルテキストで結合を使用できません。これが最も速い方法のようでした。フルテキストと結合の問題がなかったら、私はこれらのクエリの両方をすでに組み合わせていただろう。