効率的な選択トップページングアルゴリズム。コードは次のとおりです。
<%
'ページごとのレコード数
薄暗いページサイズ
Pagesize = 30
「記録の総数、ページの総数を読む、Piaoyiノート
Dim TotalRecords、TotalPages
SQLSTR = Table1からRecordsumとしてcount(id)を選択します
rs = conn.execute(sqlstr、0,1)を設定します
TotalRecords = rs(Recordsum)
int(TotalRecords/Pagesize)= TotalRecords/Pagesize Thenの場合
TotalPages = TotalRecords/Pagesize
それ以外
TotalPages = int(TotalRecords/Pagesize)+1
ifを終了します
rs.close
rs = Nothingを設定します
'現在のページ番号、Piaoyiノート
薄暗いページ
ページ=リクエスト(ページ)
is -numeric(page)= falseの場合
respons.write <スクリプト言語= javascript> alert( 'parameter error!');
respons.write windos.close(); </script>
Response.End
ifを終了します
page =またはpage <1の場合、page = 1
Page-Totalpages> 0の場合、Page = TotalPages
page = int(page)
page = 1の場合
sql = top&pagesize&id、title、time from table1 order by time descを選択
それ以外
sql = top&pagesize&id、title、table1からtable1からの時間<
ifを終了します
rs = server.createObject(adodb.Recordset)を設定します
rs.open sql、conn、1,1
rs.eofではありません
response.各レコード情報を作成:&rs(id)&<br>
rs.movenext
ループ
rs.close
rs = Nothingを設定します
''ページターンコード省略...
%>
これは非常に効率的なページングアルゴリズムです。データテーブル内のデータの量が数百万に達すると、上記のページングアルゴリズムの応答時間は非常に短く、通常は数十ミリ秒以内です。原則は非常に簡単です。
上記の2つのページングアルゴリズムの例では、Flymornはタイムフィールド時間をソートで使用します。これは、私が公開しているため、最近ユーザーを更新する必要があるためです(新しく追加されたレコードと新しい変更を含む)古いレコード(古いレコード)の正面に表示されます。自動的に番号付きのIDのみがソートフィールドとして使用されている場合、ユーザーが編集した古い情報は正面に表示されません。これが、フライモーンがタイムフィールドを使用する理由です。
これには、集約されたインデックスの問題が含まれます。デフォルトでは、自動番号付きIDをプライマリキーとして使用し、そのようなID列を使用して上記のアルゴリズムを並べ替えると、より効率的になり、データベースはより少なくします。最近更新されたコンテンツを前のコンテンツに表示する必要があるという質問に言及したため、時間フィールドを使用してソートする必要があります。したがって、より高いページング効率を達成するために、データベースを設計するときにこの時間フィールドを集計インデックス列として設計できます。
このような設計の後、全体的なページング効率が大幅に改善されます。
ただし、この時間フィールドをAggregateインデックス列として使用することには、別の小さな問題があります。データテーブルが配置されると、ユーザーがデータを追加すると、データテーブルの最後に追加されますデータベースは、この集約されたインデックス列に基づいて、テーブルの最後まで新しく編集された情報についても言及している必要があります。これには一定の時間がかかります。つまり、時間フィールドをAggregateインデックス列として使用する場合、データを更新するときにもう少し時間を費やす必要があります。
ただし、包括的な比較では、Select Topの効率的なページングアルゴリズムの鍵は、完全なテーブルのスキャンを避け、必要なフィールドのみを取得しようとしていますソートされたSQLステートメントの応答時間は最速です。この処理の後、SQL Serverデータベースの場合、たとえ数千万人のデータがあっても、ページングアルゴリズムが応答を失うことを心配する必要はありません。
上記は、ASP言語を例として記述されたアルゴリズムであり、もちろんASP.NETやPHPなどの他の言語に変更することもできます。このようなページングコードをより適切に使用するために、上記のアルゴリズムをストアドプロシージャに書き換えることもできます。
最後に、小さな質問を残します。トップページングを選択すると、ページが最後になったら、ソートフィールド列が集計インデックス列でない場合はどうなりますか?