สร้างตาราง:
สร้างตาราง [TestTable] (
[ID] [int] ตัวตน (1, 1) ไม่เป็นโมฆะ
[ชื่อ] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[นามสกุล] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[ประเทศ] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[หมายเหตุ] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) เปิด [หลัก]
GO
ใส่ข้อมูล: (20,000 รายการ การทดสอบด้วยข้อมูลมากขึ้นจะชัดเจนยิ่งขึ้น)
SET IDENTITY_INSERT TestTable ON
ประกาศ @i int
ตั้ง @i=1
ในขณะที่ @i<=20000
เริ่ม
แทรกลงในค่า TestTable([id], FirstName, LastName, Country,Note)(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
ตั้ง @i=@i+1
สิ้นสุด
SET IDENTITY_INSERT ตารางทดสอบปิด
---------------------------------------
โซลูชันเพจจิ้งที่หนึ่ง: (ใช้ Not In และ SELECT TOP เพจ)
แบบฟอร์มคำชี้แจง:
เลือก 10 อันดับแรก*
จากตารางทดสอบ
ที่ไหน (ไม่อยู่ใน.
(เลือกรหัส 20 อันดับแรก
จากตารางทดสอบ
เรียงตามไอดี))
สั่งซื้อตามไอดี
เลือกขนาดหน้าบนสุด*
จากตารางทดสอบ
ที่ไหน (ไม่อยู่ใน.
(เลือกขนาดหน้าบนสุด * หมายเลขหน้า id
จากตาราง
เรียงตามไอดี))
ORDER BY ID
---------------------------------------
รูปแบบเพจสอง: (ใช้ผลรวม จำนวน ID ที่มากกว่าเพจ SELECT TOP)
แบบฟอร์มคำชี้แจง:
เลือก 10 อันดับแรก*
จากตารางทดสอบ
ที่ไหน (รหัส >
(เลือกสูงสุด(id)
จาก (เลือกรหัส 20 อันดับแรก
จากตารางทดสอบ
เรียงตาม id) AS T))
สั่งซื้อตามไอดี
เลือกขนาดหน้าบนสุด*
จากตารางทดสอบ
ที่ไหน (รหัส >
(เลือกสูงสุด(id)
จาก (เลือกขนาดหน้าบนสุด * รหัสหน้า
จากตาราง
เรียงตาม id) AS T))
สั่งซื้อตามไอดี
---------------------------------------
รูปแบบการเพจที่สาม: (การใช้เพจ SQL เคอร์เซอร์ที่เก็บไว้การเพจ )
สร้างขั้นตอน XiaoZhengGe
@sqlstr nvarchar(4000), --สตริงแบบสอบถาม
@currentpage int, --เพจ N
@pagesize int --จำนวนบรรทัดต่อหน้า
เช่น
ตั้งค่า nocount บน
ประกาศ @ P1 int, --P1 คือรหัสของเคอร์เซอร์
@rowcountint
exec sp_cursoropen @P1 เอาต์พุต,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount เอาต์พุต
เลือกเพดาน ( 1.0*@rowcount/@pagesize ) เป็นจำนวนหน้าทั้งหมด--,@rowcount เป็นจำนวนแถวทั้งหมด,@currentpage เป็นหน้าปัจจุบัน
ตั้ง @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @ P1,16,@หน้าปัจจุบัน,@ขนาดหน้า
ดำเนินการ sp_cursorclose @ P1
กำหนด nocount off
โซลูชันอื่นๆ: หากไม่มีคีย์หลัก คุณสามารถใช้ตารางชั่วคราว หรือใช้โซลูชันที่สาม แต่ประสิทธิภาพจะต่ำ
ขอแนะนำว่าเมื่อทำการเพิ่มประสิทธิภาพ การเพิ่มคีย์หลักและดัชนีจะช่วยปรับปรุงประสิทธิภาพการสืบค้น
ผ่าน SQL Query Analyzer การเปรียบเทียบการแสดงผล: ข้อสรุปของฉันคือ:
รูปแบบเพจที่สอง: (ใช้ ID มากกว่าอะไรและเลือก TOP สำหรับการเพจ) มีประสิทธิภาพมากที่สุด จำเป็นต้องแยกคำสั่ง SQL แผนเพจเพจที่หนึ่ง: (ใช้ Not In และ SELECT TOP สำหรับการเพจ) มีประสิทธิภาพมากที่สุดเป็นอันดับสอง ต้องแยกคำสั่ง SQL สำหรับ รูปแบบการเพจที่สาม: (การใช้รูปแบบการเพจของ SQL) การเพจของเคอร์เซอร์ที่เก็บไว้) มีประสิทธิภาพน้อยที่สุด แต่เป็นวิธีทั่วไปที่สุด
ในสถานการณ์จริง จำเป็นต้องมีการวิเคราะห์เฉพาะ