Algoritma Paging Top yang Efisien. Kodenya adalah sebagai berikut:
<%
Jumlah catatan per halaman
redup halaman
halaman = 30
'Baca jumlah total catatan, jumlah total halaman, catatan piaoyi
Redup total, totalpages
SQLSTR = SELECT COUNT (ID) Sebagai Recordsum dari Tabel1
Set RS = Conn.Execute (SQLSTR, 0,1)
TotalRecords = RS (Recordsum)
Jika int (TotalRecords/PageSize) = Total Records/PageSize maka
TotalPages = Total Records/PageSize
kalau tidak
TotalPages = int (TotalRecords/PageSize) +1
akhiri jika
Rs.close
Setel RS = tidak ada
'Nomor halaman saat ini, catatan piaoyi
Halaman redup
halaman = permintaan (halaman)
jika isnumeric (halaman) = false maka
response.write <bahasa skrip = javascript> alert ('kesalahan parameter!');
response.write window.close (); </script>
respons.end
akhiri jika
Jika halaman = atau halaman <1 maka halaman = 1
Jika Page-Totalpages> 0 maka halaman = TotalPages
halaman = int (halaman)
Jika halaman = 1 lalu
SQL = Pilih Top & PageSize & ID, Judul, Waktu dari Table1 Order demi Time Desc
kalau tidak
SQL = Pilih Top & Pagesze & ID, Judul, Waktu dari Table1 Where Time <(Pilih Min (Waktu) Dari (Pilih Top & Pagesze*(Halaman-1) & Waktu dari Tabel1 Pesanan demi Time Desc) sebagai t) Pesan dengan waktu Desc
akhiri jika
Set RS = Server.CreateObject (ADODB.Recordset)
Rs.open SQL, Conn, 1,1
Lakukan sementara tidak rs.eof
response.write setiap informasi catatan: & rs (id) & <br>
rs.movenext
lingkaran
rs.close
Setel RS = tidak ada
'' Halaman putar kode dihilangkan ...
%>
Ini adalah algoritma paging yang sangat efisien. Ketika jumlah data dalam tabel data mencapai jutaan, waktu respons dari algoritma paging di atas sangat singkat, biasanya dalam beberapa puluh milidetik. Prinsipnya sangat sederhana.
Dalam contoh -contoh dari dua algoritma paging di atas, Flymorn menggunakan waktu lapangan waktu untuk memesan, karena di sebagian besar sistem saya telah terpapar, kita perlu memperbarui pengguna baru -baru ini (termasuk catatan yang baru ditambahkan dan modifikasi baru) dari catatan lama (catatan lama) ditampilkan di depan. Inilah sebabnya mengapa Flymorn menggunakan bidang waktu.
Ini melibatkan masalah pengindeksan agregat. Secara default, kami menggunakan ID bernomor otomatis sebagai kunci utama dan menggunakannya sebagai kolom indeks agregat. Saya menyebutkan pertanyaan bahwa konten yang baru -baru ini diperbarui perlu ditampilkan di yang sebelumnya, jadi kami harus menggunakan bidang waktu untuk mengurutkannya. Oleh karena itu, untuk mencapai efisiensi paging yang lebih tinggi, kami dapat merancang bidang waktu ini sebagai kolom indeks agregat saat merancang database.
Setelah desain seperti itu, efisiensi paging keseluruhan akan sangat ditingkatkan.
Namun, ada masalah kecil lain dengan menggunakan bidang waktu ini sebagai kolom indeks agregat. Karena tabel data diatur, secara fisik diurutkan sesuai dengan kolom indeks agregat. Basis data perlu didasarkan pada kolom indeks agregat ini juga menyebutkan informasi yang baru diedit ke akhir tabel, yang membutuhkan waktu tertentu. Artinya, ketika kita menggunakan bidang waktu sebagai kolom indeks agregat, kita perlu menghabiskan sedikit lebih banyak waktu saat memperbarui data.
Namun, dalam perbandingan yang komprehensif, Piaoyi percaya bahwa kunci algoritma paging yang efisien dari Top Select adalah untuk menghindari pemindaian tabel penuh dan mencoba untuk hanya mendapatkan bidang yang diperlukan. adalah waktu respons dari pernyataan SQL yang diurutkan adalah yang tercepat. Setelah pemrosesan ini, untuk database SQL Server, bahkan jika ada puluhan juta data, tidak perlu khawatir bahwa algoritma paging akan kehilangan responsnya.
Di atas adalah algoritma yang ditulis dengan bahasa ASP sebagai contoh, dan tentu saja juga dapat dimodifikasi menjadi bahasa lain seperti ASP.NET dan PHP. Untuk menggunakan kode paging seperti itu dengan lebih baik, Anda juga dapat menulis ulang algoritma di atas menjadi prosedur tersimpan.
Akhirnya, tinggalkan pertanyaan kecil: Saat memilih paging atas, ketika halaman diputar ke akhir, apa yang akan terjadi jika kolom bidang penyortiran bukan kolom indeks agregat?