ขั้นแรกเราจะให้วิธีการเพจหลักและคำสั่งหลักหลายวิธี จากนั้นจึงให้ข้อสรุปโดยตรง ผู้อ่านที่สนใจสามารถดูข้อมูลต่อไปนี้สำหรับวิธีการเพจเจอร์ที่เก็บไว้ที่ใช้กันทั่วไปหลายวิธี
วิธีท็อปเอ็น
เลือก Top(@PageSize) จาก TableName โดยที่ ID Not IN
(เลือก Top ((@PageIndex-1)*@PageSize) ID จาก Table Name โดยที่ .... เรียงลำดับโดย ... )
โดยที่....สั่งโดย...
โต๊ะชั่วคราว
คัดลอกรหัสรหัสดังต่อไปนี้:
ประกาศตาราง @indextable (id int identity (1,1), nid int, PostUserName nvarchar (50))
ประกาศ @PageLowerBound int
ประกาศ @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize--ขีดจำกัดล่าง
ตั้งค่า @PageUpperBound=@PageLowerBound+@pagesize--ขีดจำกัดบน
ตั้งค่าจำนวนแถว @PageUpperBound
ใส่เข้าไปใน @indextable(nid,PostUserName) เลือก ReplyID,PostUserName จาก TableName เรียงลำดับตาม ......
เลือก * จาก TableName p,@indextable t โดยที่ p.ID=t.nid
และ t.id>@PageLowerBound และ t.id<=@PageUpperBound เรียงลำดับโดย t.id
CTE--2005 ไวยากรณ์ใหม่ คล้ายกับตารางชั่วคราว แต่วงจรชีวิตแตกต่างออกไปเล็กน้อย นี่เป็นเพียงการนำไปประยุกต์ใช้
ด้วย cte_temp--กำหนดตารางเวลาเป็นศูนย์ PageIndex เป็นฟิลด์จากการคำนวณที่เก็บหมายเลขหน้าของผลการค้นหา
As (ceiling((Row_Number() over(order by .... )-1)/@pagesize as int) as PageIndex,* จาก TableName โดยที่.....)
เลือก * จาก cte_temp โดยที่ pageindex=@pageindex-1;
สรุปแล้ว:
TopN จะเร็วที่สุดเมื่อจำนวนหน้าน้อย หากน้อยกว่า 10 หน้า คุณสามารถพิจารณาใช้ CTE และเวลาตารางชั่วคราวมีความเสถียรมาก tempdb สู่ skyrocket และ IO เพื่อเพิ่ม
การเปรียบเทียบประสิทธิภาพ
สภาพแวดล้อมการทดสอบ: win2003server, Sqlserver2005, ไลบรารีขนาด 2,567,245 แถว, ไม่มีส่วนคำสั่งที่ไหน, ขนาดหน้า 50 ระหว่างการทดสอบ, หมายเลขหน้าเป็นตัวแปร
นำหน้า 0, 3, 10, 31, 100, 316, 1000, 3162... ซึ่งเป็นดัชนี 10 ผลการทดสอบมีดังนี้
จำนวนหน้าTopN CTE ตารางชั่วคราว (พร้อมแคช) ตารางชั่วคราว (ไม่มีแคช)
การปรับปรุงขั้นตอนการจัดเก็บ CTE ที่บริษัทใช้
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
1,000 โมฆะ 9806 869 2578 635 8948
3162 โมฆะ 9822 2485 4110 12460 8210
10,000 โมฆะ 9754 7812 11926 14250 7359
31623 โมฆะ 9775 18729 33218 15249 7511
100000 โมฆะ โมฆะ 31538 55569 17139 6124
การตีความและการวิเคราะห์ข้อมูล
ตารางชั่วคราวแบ่งออกเป็นสองประเภท: แคชหรือไม่ CTE เป็นวิธีการข้างต้น การปรับปรุง CTE จะลดจำนวนคอลัมน์ที่เลือกลงในตารางชั่วคราวของ CTE เท่านั้น ไม่สามารถคำนวณเวลาได้ (เวลายาวเกินไป) หน่วยข้อมูลเป็นมิลลิวินาที
จากข้อมูลข้างต้น เราจะเห็นว่า TopN มีข้อได้เปรียบใน 32 หน้าแรก แต่เมื่อจำนวนหน้าเพิ่มขึ้น ประสิทธิภาพก็ลดลงอย่างรวดเร็ว การปรับปรุง CTE นั้นดีกว่า CTE โดยมีการปรับปรุงโดยเฉลี่ยประมาณสองวินาที ก็ยังดีกว่าตารางชั่วคราว ช้า แต่เมื่อพิจารณาว่าตารางชั่วคราวจะเพิ่มขนาดของไฟล์บันทึกและทำให้ IO จำนวนมาก CTE ก็มีข้อดีในตัวเองเช่นกัน ขั้นตอนการจัดเก็บที่ บริษัท ใช้อยู่ในปัจจุบันมีประสิทธิภาพมาก แต่ประสิทธิภาพจะลดลงเมื่อเลขหน้ามาทีหลัง