1

MySQL データベース (v5.1.63) から 3600 行を読み取り、HTML テーブルにデータを出力する ASP で Web アプリケーションを作成しました。レコードセットを使用してデータとページサイズ/カーソル位置を取得し、ユーザーがページ間を前後に移動できるようにしています。データベースには現在約 200.000 行が含まれていますが、継続的に増加しています。

ページの読み込みに時間がかかるため (現在は約 15 ~ 20 秒)、可能であれば最適化したいと考えています。

パフォーマンスを改善する方法についてのヒントを得ることに非常に興味があります。

データベース構造は次のとおりです。

# 列 タイプ 照合属性 Null デフォルト
1 ID int(11) いいえ なし AUTO_INCREMENT
2 mean varchar(5) utf8_general_ci いいえ なし
3 max varchar(5) utf8_general_ci いいえ なし
4 分 varchar(5) utf8_general_ci いいえ なし
5 dt varchar(20) utf8_general_ci いいえ なし
6 dir varchar(2) utf8_general_ci いいえ なし
7 ログテキスト utf8_general_ci いいえ なし

私が使用しているコードは次のとおりです。

' Opening the db
Set oConn = Server.CreateObject("ADODB.Connection")
Set oRS = Server.CreateObject("ADODB.Recordset")
oConn.ConnectionString =
"DRIVER={MySQL};SERVER=<server>;DATABASE=<database>;UID=<uid>;PWD=<pwd>;"
oConn.Open

' Retrieve 3600 records
sSQL = "SELECT * FROM mytable ORDER BY id DESC"
oRS.CursorLocation = adUseServer
oRS.PageSize = 6*600
oRS.Open sSQL, oConn, adOpenForwardOnly, adLockReadOnly
nPageCount = oRS.PageCount

...code to set the page selected by the user (nPage)

oRS.AbsolutePage = nPage

Do While Not (oRS.EOF Or oRS.AbsolutePage <> nPage)
    ...
    Response.Write("<td>" & oRS("dt") & "</td>")
    Response.Write("<td>" & oRS("mean") & "</td>")
    Response.Write("<td>" & oRS("min") & "</td>")
    Response.Write("<td>" & oRS("max") & "</td>")
    ...
    oRS.MoveNext
Loop
oRS.Close
4

1 に答える 1

2

LIMITMySQLをRDMSとして使用している場合、mySqls句を使用してページングを実行するとはるかに効率的です。

つまり、特定のクエリ文字列ページ番号に対してページごとに10個のアイテムを取得するには:

ItemsPerPage    = 10
PageNumber      = request.querystring("Page")

if PageNumber = "" then 
    PageNumber = 0
end if

Limit           = PageNumber * ItemsPerPage
Query           = "SELECT * FROM mytable ORDER BY id DESC LIMIT " & Limit & ", " & ItemsPerPage
于 2012-09-19T09:03:33.607 に答える