Pertama-tama kami memberikan beberapa metode paging utama dan pernyataan inti, lalu langsung memberikan kesimpulannya. Pembaca yang tertarik dapat melihat data berikut untuk beberapa metode paging prosedur tersimpan yang umum digunakan.
metode TopN
pilih Top(@PageSize) dari TableName di mana ID Not IN
(Pilih ID Teratas ((@PageIndex-1)*@PageSize) dari Nama Tabel di mana .... diurutkan berdasarkan ... )
dimana....dipesan berdasarkan...
meja sementara
Copy kode kodenya sebagai berikut:
mendeklarasikan tabel @indextable(id int identitas(1,1),nid int,PostUserName nvarchar(50))
nyatakan @PageLowerBound int
nyatakan @PageUpperBound int
setel @PageLowerBound=(@pageindex-1)*@pagesize--batas bawah
setel @PageUpperBound=@PageLowerBound+@pagesize--batas atas
atur jumlah baris @PageUpperBound
masukkan ke dalam @indextable(nid,PostUserName) pilih ReplyID,PostUserName dari TableName diurutkan berdasarkan ......
pilih * dari Nama Tabel p,@indextable t dimana p.ID=t.nid
dan t.id>@PageLowerBound dan t.id<=@PageUpperBound diurutkan berdasarkan t.id
Sintaks baru CTE--2005, mirip dengan tabel sementara, tetapi siklus hidupnya sedikit berbeda. Ini hanyalah penerapannya.
dengan cte_temp--Mendefinisikan tabel waktu nol. PageIndex adalah bidang terhitung yang menyimpan nomor halaman hasil pencarian.
Sebagai (ceiling((Row_Number() over(order by .... )-1)/@pagesize as int) sebagai PageIndex,* dari TableName di mana.....)
pilih * dari cte_temp di mana pageindex=@pageindex-1;
kesimpulannya:
TopN adalah yang tercepat ketika jumlah halamannya sedikit. Jika kurang dari 10 halaman, Anda dapat mempertimbangkan untuk menggunakannya. CTE dan waktu tabel sementara sangat stabil tempdb meroket dan IO meningkat.
Perbandingan kinerja
Lingkungan pengujian: win2003server, Sqlserver2005, ukuran perpustakaan 2.567.245 baris, klausa tanpa tempat, ukuran halaman 50 selama pengujian, nomor halaman sebagai variabel
Ambil 0, 3, 10, 31, 100, 316, 1000, 3162... halaman yang indeksnya 10. Hasil pengujiannya sebagai berikut
Jumlah halamanTopN CTE Tabel sementara (dengan cache) Tabel sementara (tanpa cache)
Prosedur tersimpan perbaikan CTE yang digunakan perusahaan
1 3 12 10 101 457 7302
3 15 7 79 5524 464 7191
10 127 5504 88 3801 464 6116
32 588 9672 122 3601 976 7602
100 4680 9738 166 4235 486 7151
316 45271 9764 323 3867 522 7255
1000 Batal 9806 869 2578 635 8948
3162 Batal 9822 2485 4110 12460 8210
10000 Batal 9754 7812 11926 14250 7359
31623 Batal 9775 18729 33218 15249 7511
100000 Batal Batal 31538 55569 17139 6124
Interpretasi dan analisis data
Tabel sementara dibagi menjadi dua jenis waktu: cache atau tidak. CTE adalah metode di atas. Peningkatan CTE hanya mengurangi jumlah kolom yang dipilih ke dalam tabel sementara CTE. Hanya nomor halaman dan kunci utama yang dipilih waktu tidak dapat dihitung (waktunya terlalu lama), satuan datanya adalah milidetik.
Dari data di atas terlihat bahwa TopN memiliki keunggulan pada 32 halaman pertama, namun seiring bertambahnya jumlah halaman, performanya menurun dengan cepat. Peningkatan CTE lebih baik dibandingkan CTE, dengan peningkatan rata-rata sekitar dua detik, namun masih lebih baik daripada tabel sementara. Lambat, namun mengingat tabel sementara akan memperbesar ukuran file log dan menyebabkan banyak IO, CTE juga memiliki kelebihan tersendiri. Prosedur tersimpan yang saat ini digunakan oleh perusahaan sangat efisien , namun performanya akan menurun seiring dengan nomor halamannya nanti.