Apakah kaedah paging dalam pelayan SQL?
Artikel ini bercakap tentang kaedah halaman pelayan SQL, menggunakan pelayan SQL versi 2012. Dalam yang berikut, pageIndex digunakan untuk mewakili bilangan halaman, dan pageSize mewakili rekod yang terkandung pada halaman. Dan yang berikut melibatkan contoh khusus, tetapkan pertanyaan halaman 2, setiap halaman mengandungi 10 rekod.
Pertama sekali, mari kita bincangkan tentang perbezaan antara paging pelayan SQL dan paging MySQL boleh dilengkapkan secara langsung dengan menggunakan had (pageIndex-1) dan pageSize, tetapi pelayan SQL tidak mempunyai kata kunci had. hanya sesuatu seperti had Kata kunci teratas. Jadi paging lebih menyusahkan.
Saya hanya tahu empat jenis paging pelayan SQL: gelung tiga kali ganda menggunakan maks (kunci utama) menggunakan kata kunci row_number, offset/fetch kata kunci seterusnya (diringkaskan dengan mengumpul kaedah orang lain di Internet , sepatutnya ada sahaja); empat kaedah ini pada masa ini, kaedah lain adalah berdasarkan ubah bentuk ini).
Sebahagian daripada rekod jadual pelajar untuk disoal
Kaedah 1: Tiga gelung
Idea
Mula-mula ambil halaman 20 teratas, dan kemudian terbalikkan tertib, dan ambil 10 rekod pertama dalam susunan terbalik, supaya anda boleh mendapatkan data yang diperlukan untuk paging, tetapi tertib terbalik Anda kemudiannya boleh mengembalikannya dalam susunan terbalik, atau anda boleh berhenti mengisih dan menyerahkannya terus ke bahagian hadapan untuk diisih.
Terdapat kaedah lain yang boleh dianggap sebagai jenis ini Saya tidak akan meletakkan kod di sini untuk mengecualikan 10 rekod ini, dan kemudian Pertanyaan.
Pelaksanaan kod
-- 设置执行时间开始,用来查看性能的 set statistics time on ; -- 分页查询(通用型) select * from (select top pageSize * from (select top (pageIndex*pageSize) * from student order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。 as temp_sum_student order by sNo desc ) temp_order order by sNo asc -- 分页查询第2页,每页有10条记录 select * from (select top 10 * from (select top 20 * from student order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。 as temp_sum_student order by sNo desc ) temp_order order by sNo asc ;
Hasil pertanyaan dan masa
Kaedah 2: Gunakan maks (kunci utama)
Mula-mula, atas 11 rekod baris pertama, kemudian gunakan maks (id) untuk mendapatkan id terbesar, dan kemudian tanya semula 10 rekod teratas dalam jadual ini, tetapi anda mesti menambah syarat, di mana id>
Pelaksanaan kod
set statistics time on; -- 分页查询(通用型) select top pageSize * from student where sNo>= (select max(sNo) from (select top ((pageIndex-1)*pageSize+1) sNo from student order by sNo asc) temp_max_ids) order by sNo; -- 分页查询第2页,每页有10条记录 select top 10 * from student where sNo>= (select max(sNo) from (select top 11 sNo from student order by sNo asc) temp_max_ids) order by sNo;
Keputusan pertanyaan dan masa
Kaedah 3: Gunakan kata kunci row_number
untuk terus menggunakan fungsi row_number() over(order by id) untuk mengira bilangan baris dan pilih nombor baris yang sepadan untuk dikembalikan Walau bagaimanapun, kata kunci ini hanya tersedia dalam pelayan SQL 2005 atau ke atas .
Pelaksanaan SQL
set statistics time on; -- 分页查询(通用型) select top pageSize * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_row where rownumber>((pageIndex-1)*pageSize); set statistics time on; -- 分页查询第2页,每页有10条记录 select top 10 * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_row where rownumber>10;
Hasil pertanyaan dan masa
Kaedah jenis keempat: offset /fetch next (hanya tersedia dalam versi 2012 dan ke atas)
Pelaksanaan kod
set statistics time on; -- 分页查询(通用型) select * from student order by sno offset ((@pageIndex-1)*@pageSize) rows fetch next @pageSize rows only; -- 分页查询第2页,每页有10条记录 select * from student order by sno offset 10 rows fetch next 10 rows only ;
offset A baris, buang rekod A pertama, ambil baris B seterusnya sahaja, untuk Kemudian baca data B.
Keputusan dan masa berjalan
Prosedur tersimpan berkapsul
Akhir sekali, saya merangkumkan paging prosedur tersimpan adalah mudah untuk semua orang memanggil, supaya apabila tiba masanya untuk menulis paging, anda boleh terus memanggil prosedur tersimpan ini.
Prosedur tersimpan paging
create procedure paging_procedure ( @pageIndex int, -- 第几页 @pageSize int -- 每页包含的记录数 ) as begin select top (select @pageSize) * -- 这里注意一下,不能直接把变量放在这里,要用select from (select row_number() over(order by sno) as rownumber,* from student) temp_row where rownumber>(@pageIndex-1)*@pageSize; end -- 到时候直接调用就可以了,执行如下的语句进行调用分页的存储过程 exec paging_procedure @pageIndex=2,@pageSize=10;
Ringkasan
Berdasarkan masa pelaksanaan empat kaedah paging di atas, kita boleh tahu bahawa antara empat kaedah paging di atas, yang kedua dan ketiga Ketiga, prestasi kaedah ketiga dan keempat adalah hampir sama, tetapi prestasi kaedah pertama adalah sangat lemah dan tidak disyorkan. Selain itu, blog ini sedang menguji sejumlah kecil data dan masih belum melambai sejumlah besar data, jadi tidak jelas kaedah mana yang mempunyai prestasi yang lebih baik apabila sejumlah besar data perlu dihalakan. Saya mengesyorkan kaedah keempat di sini Lagipun, kaedah keempat adalah kaedah baru yang diperkenalkan selepas syarikat pelayan SQL dinaik taraf, jadi ia secara teorinya harus mempunyai prestasi dan kebolehbacaan yang lebih baik.
Cadangan berkaitan: "tutorial mysql"
Atas ialah kandungan terperinci Apakah kaedah paging dalam pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Artikel ini membincangkan pembahagian data mendatar dan menegak dalam SQL, yang memberi tumpuan kepada kesannya terhadap prestasi dan skalabilitas. Ia membandingkan manfaat dan pertimbangan untuk memilih di antara mereka.

Artikel ini menerangkan cara menggunakan fungsi agregat SQL (SUM, AVG, Count, Min, Max) untuk meringkaskan data, memperincikan kegunaan dan perbezaannya, dan bagaimana menggabungkannya dalam pertanyaan.

Artikel ini membincangkan risiko keselamatan SQL dinamik, yang memberi tumpuan kepada suntikan SQL, dan menyediakan strategi mitigasi seperti menggunakan pertanyaan parameter dan pengesahan input.

Artikel ini membincangkan Tahap Pengasingan Transaksi SQL: Baca tidak komited, baca bacaan yang komited, berulang, dan bersiri. Ia mengkaji kesan mereka terhadap konsistensi dan prestasi data, dengan menyatakan bahawa pengasingan yang lebih tinggi memastikan konsistensi yang lebih besar tetapi MA

Artikel ini membincangkan sifat asid (atomik, konsistensi, pengasingan, ketahanan) dalam urus niaga SQL, penting untuk mengekalkan integriti data dan kebolehpercayaan.

Artikel membincangkan menggunakan SQL untuk pematuhan GDPR dan CCPA, yang memberi tumpuan kepada pengabaian data, permintaan akses, dan penghapusan automatik data yang sudah lapuk. (159 aksara)

Artikel ini membincangkan mendapatkan pangkalan data SQL terhadap kelemahan seperti suntikan SQL, menekankan pernyataan yang disediakan, pengesahan input, dan kemas kini tetap.

Artikel membincangkan pelaksanaan pembahagian data dalam SQL untuk prestasi dan skalabiliti yang lebih baik, kaedah perincian, amalan terbaik, dan alat pemantauan.
