อัลกอริทึมการเลือกยอดเยี่ยมที่มีประสิทธิภาพ รหัสมีดังนี้:
-
'จำนวนระเบียนต่อหน้า
สลัวหน้า
PAGESIZE = 30
'อ่านจำนวนระเบียนทั้งหมดจำนวนหน้าทั้งหมด Piaoyi Notes
Dim TotalRecords, TotalPages
SQLSTR = SELECT COUNT (ID) เป็น RecordSum จากตารางที่ 1
ตั้งค่า rs = conn.execute (sqlstr, 0,1)
TotalRecords = Rs (Recordsum)
ถ้า int (totalRecords/pagesize) = totalRecords/pagesize แล้ว
TotalPages = TotalRecords/Pagesize
อื่น
TotalPages = int (TotalRecords/Pagesize) +1
สิ้นสุดถ้า
Rs.close
ตั้งค่า rs = ไม่มีอะไร
'หมายเลขหน้าปัจจุบันหมายเหตุ piaoyi
หน้ามืด
หน้า = คำขอ (หน้า)
ถ้า isnumeric (หน้า) = false แล้ว
Response.write <ภาษาสคริปต์ = JavaScript> การแจ้งเตือน ('ข้อผิดพลาดพารามิเตอร์!');
Response.write window.close (); </script>
Response.end
สิ้นสุดถ้า
ถ้าหน้า = หรือหน้า <1 แล้วหน้า = 1
ถ้าหน้า TotalPages> 0 แล้ว page = TotalPages
หน้า = int (หน้า)
ถ้าหน้า = 1 แล้ว
SQL = เลือก TOP & PAGESIZE & ID, ชื่อเรื่องเวลาจากตารางที่ 1 สั่งซื้อตามเวลา DESC
อื่น
SQL = เลือก TOP & PAGESIZE & ID, ชื่อเรื่องเวลาจากตารางที่ 1 โดยที่เวลา <(เลือกขั้นต่ำ (เวลา) จาก (เลือก TOP & PAGESIZE
สิ้นสุดถ้า
ตั้งค่า rs = server.createObject (adodb.recordset)
Rs.Open SQL, Conn, 1,1
ทำในขณะที่ไม่ใช่ RS.EOF
Response.write ข้อมูลบันทึกแต่ละรายการ: & rs (id) & <br>
Rs.Movenext
วง
Rs.close
ตั้งค่า rs = ไม่มีอะไร
'' เพจปิดรหัสละเว้น ...
-
นี่เป็นอัลกอริทึมการเพจที่มีประสิทธิภาพมาก เมื่อจำนวนข้อมูลในตารางข้อมูลถึงหลายล้านครั้งเวลาตอบสนองของอัลกอริทึมการเพจข้างต้นนั้นสั้นมากโดยปกติจะอยู่ภายในไม่กี่สิบมิลลิวินาที หลักการนั้นง่ายมาก
ในตัวอย่างของอัลกอริทึมการเพจสองข้างด้านบน Flymorn ใช้เวลาในการสั่งซื้อเวลาในการเรียงลำดับเนื่องจากในระบบส่วนใหญ่ที่ฉันได้ติดต่อกับเราต้องอัปเดตผู้ใช้เมื่อเร็ว ๆ นี้ (รวมถึงระเบียนที่เพิ่มขึ้นใหม่และการดัดแปลงใหม่) เนื้อหาของเร็กคอร์ดเก่า (ระเบียนเก่า) จะปรากฏขึ้นที่ด้านหน้า นี่คือเหตุผลที่ Flymorn ใช้สนามเวลา
สิ่งนี้เกี่ยวข้องกับปัญหาของการจัดทำดัชนีโดยรวม โดยค่าเริ่มต้นเราใช้รหัสหมายเลขอัตโนมัติเป็นคีย์หลักและใช้เป็นคอลัมน์ดัชนีรวม ฉันพูดถึงคำถามที่ว่าเนื้อหาที่ได้รับการปรับปรุงเมื่อเร็ว ๆ นี้จำเป็นต้องแสดงในก่อนหน้านี้ดังนั้นเราต้องใช้ฟิลด์เวลาในการเรียงลำดับ ดังนั้นเพื่อให้ได้ประสิทธิภาพการเพจที่สูงขึ้นเราสามารถออกแบบฟิลด์เวลานี้เป็นคอลัมน์ดัชนีรวมเมื่อออกแบบฐานข้อมูล
หลังจากการออกแบบดังกล่าวประสิทธิภาพการเพจโดยรวมจะได้รับการปรับปรุงอย่างมาก
อย่างไรก็ตามมีปัญหาเล็กน้อยอีกประการหนึ่งกับการใช้ฟิลด์เวลานี้เป็นคอลัมน์ดัชนีรวม เพราะเมื่อจัดตารางข้อมูลจะถูกจัดเรียงทางร่างกายตามคอลัมน์ดัชนีรวม ฐานข้อมูลจะต้องขึ้นอยู่กับคอลัมน์ดัชนีที่รวมนี้ยังกล่าวถึงข้อมูลที่แก้ไขใหม่ในตอนท้ายของตารางซึ่งใช้เวลาระยะเวลาหนึ่ง กล่าวคือเมื่อเราใช้ฟิลด์เวลาเป็นคอลัมน์ดัชนีรวมเราต้องใช้เวลาเพิ่มขึ้นเล็กน้อยเมื่ออัปเดตข้อมูล
อย่างไรก็ตามในการเปรียบเทียบที่ครอบคลุม Piaoyi เชื่อว่ากุญแจสู่อัลกอริทึมการเพจที่มีประสิทธิภาพของ Select Top คือการหลีกเลี่ยงการสแกนตารางเต็มรูปแบบและพยายามที่จะได้รับเฉพาะฟิลด์ที่ต้องการ เป็นเวลาตอบสนองของคำสั่ง SQL ที่เรียงลำดับเร็วที่สุด หลังจากการประมวลผลนี้สำหรับฐานข้อมูล SQL Server แม้ว่าจะมีข้อมูลหลายสิบล้านข้อมูล แต่ก็ไม่จำเป็นต้องกังวลว่าอัลกอริทึมเพจจะสูญเสียการตอบสนอง
ข้างต้นเป็นอัลกอริทึมที่เขียนด้วยภาษา ASP เป็นตัวอย่างและแน่นอนว่ามันสามารถแก้ไขเป็นภาษาอื่น ๆ เช่น ASP.NET และ PHP เพื่อให้ใช้รหัสเพจเช่นนี้ได้ดีขึ้นคุณยังสามารถเขียนอัลกอริทึมข้างต้นลงในขั้นตอนที่เก็บไว้ได้
ในที่สุดทิ้งคำถามเล็ก ๆ ไว้: เมื่อเลือก Paging ด้านบนเมื่อหน้าถูกเปิดให้สิ้นสุดจะเกิดอะไรขึ้นถ้าคอลัมน์ฟิลด์การเรียงลำดับไม่ใช่คอลัมน์ดัชนีรวม?