Buat tabel:
BUAT TABEL [Tabel Uji] (
[ID] [int] IDENTITAS (1, 1) BUKAN NULL,
[Nama Depan] [nvarchar] (100) Susun Chinese_PRC_CI_AS NULL ,
[Nama Belakang] [nvarchar] (100) Susun Chinese_PRC_CI_AS NULL ,
[Negara] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Catatan] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) PADA [UTAMA]
GO
masukkan data: (20.000 item, pengujian dengan lebih banyak data akan lebih jelas)
SET IDENTITY_INSERT TestTable ON
deklarasikan @i int
atur @i=1
sementara @i<=20000
mulai
masukkan ke dalam nilai TestTable([id], FirstName, LastName, Country,Note)(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
atur @i=@i+1
akhir
SET IDENTITY_INSERT TestTable OFF
---------------------------------------
Solusi paging satu: (Gunakan Not In dan SELECT TOP paging)
Formulir pernyataan:
PILIH 10 TERATAS*
DARI Tabel Tes
DIMANA (ID TIDAK MASUK
(PILIH 20 ID TERATAS
DARI Tabel Tes
PESANAN BERDASARKAN ID))
PESANAN BERDASARKAN ID
PILIH ukuran halaman TERATAS*
DARI Tabel Tes
DIMANA (ID TIDAK MASUK
(PILIH ukuran halaman TOP * id nomor halaman
DARI meja
PESANAN BERDASARKAN ID))
ORDER BY ID
------------------------
Skema paging dua: (Gunakan jumlah berapa banyak ID yang lebih besar dari SELECT TOP paging)
Formulir pernyataan:
PILIH 10 TERATAS*
DARI Tabel Tes
DIMANA (ID >
(PILIH MAKS(id)
DARI (PILIH 20 id TERATAS
DARI Tabel Tes
DIPESAN BERDASARKAN id) SEBAGAI T))
PESANAN BERDASARKAN ID
PILIH ukuran halaman TERATAS*
DARI Tabel Tes
DIMANA (ID >
(PILIH MAKS(id)
DARI (PILIH ukuran halaman TOP * id nomor halaman
DARI meja
DIPESAN BERDASARKAN id) SEBAGAI T))
PESANAN BERDASARKAN ID
---------------------------------------
Skema paging tiga: (Menggunakan paging prosedur tersimpan kursor SQL )
buat prosedur XiaoZhengGe
@sqlstr nvarchar(4000), --string kueri
@halaman saat ini int, --Halaman N
@pagesize int --Jumlah baris per halaman
sebagai
tetapkan tidak ada hitungan
nyatakan @P1 int, --P1 adalah id kursor
@jumlah baris ke dalam
exec sp_cursoropen @P1 keluaran,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount keluaran
pilih plafon ( 1.0*@rowcount/@pagesize ) sebagai jumlah total halaman--,@rowcount sebagai jumlah total baris,@currentpage sebagai halaman saat ini
atur @halaman saat ini=(@halaman saat ini-1)*@ukuran halaman+1
exec sp_cursorfetch @P1,16,@halaman saat ini,@ukuran halaman
exec sp_cursorclose @P1
set nocount off
solusi lain: Jika tidak ada kunci utama, Anda dapat menggunakan tabel sementara, atau Anda dapat menggunakan solusi ketiga, tetapi efisiensinya akan rendah.
Disarankan bahwa saat mengoptimalkan, menambahkan kunci utama dan indeks akan meningkatkan efisiensi kueri.
Melalui SQL Query Analyzer, tampilkan perbandingan: Kesimpulan saya adalah:
Skema paging dua: (Menggunakan ID lebih besar dari apa dan SELECT TOP untuk paging) Yang paling efisien, perlu menyambung pernyataan SQL skema paging satu: (Menggunakan Not In dan SELECT TOP untuk paging) Yang paling efisien kedua, perlu menyambung pernyataan SQL untuk skema paging tiga: (Menggunakan skema paging SQL) Prosedur paging kursor yang disimpan) adalah yang paling tidak efisien, tetapi yang paling umum
Dalam situasi aktual, diperlukan analisis khusus.