Bagaimana cara menerapkan paging secara efektif?

9

Saya memiliki permintaan basis data yang dapat menghasilkan kumpulan hasil yang besar. Klien yang menampilkan data menerima data melalui jaringan, jadi idenya adalah untuk meminimalkan jumlah data yang ditransfer dengan mengambil hanya 50 hasil pertama dari database dan mengirimkannya ke klien. Lalu saya akan memberikan kemungkinan untuk melompat ke halaman kedua untuk mengambil 50 hasil berikutnya, dll. (Sesuatu yang mirip seperti yang ditawarkan google)

Pertanyaannya adalah apa cara efektif menerapkan paging. Saya ingin memastikan bahwa mssql menggunakan cache sebanyak mungkin dan hal yang sama tidak dieksekusi sekali lagi setiap kali saya mengubah halaman.

Ada lebih banyak klien yang menanyakan database dalam waktu bersamaan. Mesin sql yang digunakan: MS SQL 2005

Gagasan saya adalah:

  • Gunakan statemenst sql siap untuk memastikan berbagi rencana eksekusi
  • gunakan ROW_COUNT variabel untuk mengambil hanya baris yang diperlukan

Tetapi apakah ini benar-benar cara yang paling efektif? Atau apakah Anda berpikir bahwa akan lebih baik untuk mengambil seluruh hasil yang ditetapkan dan menerapkan paging dalam kode yang mengirimkan data ke klien?

Terima kasih atas tipsnya!

Salam, Tomas

Tomas Walek
sumber

Jawaban:

7

Permintaan akan dieksekusi setiap saat. SQL Server tidak men-cache hasil.

Paging yang tepat tidak akan diimplementasikan hingga SQL Server 2011, tetapi sampai saat itu pilihan Anda (seperti yang Anda identifikasi) adalah:

  • ROW_NUMBER () dan permintaan atas permintaan
  • caching klien

Pernyataan SQL yang disiapkan akan dieksekusi juga setiap waktu.

Jika Anda memiliki klien yang gendut maka caching bersifat lokal untuk klien. Ini sebagian besar OK kecuali jika Anda memiliki jutaan gumpalan misalnya.

Di klien web kami, kami menyajikan semua hasil tetapi hanya menampilkan 100 teratas dan memiliki tombol "Tampilkan semua" daripada memperluas DIV tersembunyi dengan baris 101+. Kami tidak melakukan cache di server web dan kami tidak menawarkan paging.

gbn
sumber
Terima kasih. Dan apa pendekatan yang lebih baik jika pengguna mengubah beberapa kriteria penyortiran? Haruskah saya menjalankan kueri sekali lagi dengan kriteria baru atau mengurutkan hasil pada klien?
Tomas Walek
1
Saya akan memilah klien. Data sudah ada di sana. Ya, basis data bagus dalam penyortiran tetapi jika datanya sama dan tersedia mengapa membuat panggilan lain? Kami menggunakan add-on jQuery untuk mengaktifkan pengurutan di browser :-)
gbn
4

Itu tergantung pada lingkungan Anda. Saya akan menyiapkan tes menggunakan kedua metode dan melihat mana yang paling cocok untuk Anda. Secara pribadi, saya akan halaman di server. Semakin sedikit data melalui kabel dan semakin sedikit data dalam RAM klien, semakin baik. Jika Anda dapat mengontrol spesifikasi mesin klien, semua lalu lintas melalui LAN nonsaturated dan klien selalu halaman melalui beberapa halaman dengan cepat, maka Anda mungkin ingin halaman di klien.

Eric Humphrey - lotahelp
sumber
Terima kasih. Saya sebenarnya membutuhkan keduanya: komunikasi antara server dan klien diimplementasikan dalam WCF, jadi ada ukuran maksimal untuk pesan dan jika set yang dihasilkan melebihi ukuran ini, saya harus mengirim lebih banyak pesan untuk mentransfer data lengkap ke klien. Klien juga suka halaman melalui beberapa halaman dengan cepat ... :(
Tomas Walek