อัลกอริธึมการเพจเป็นปัญหาที่นักพัฒนาเว็บกังวลอย่างมาก เกือบทุกแอปพลิเคชันที่เกี่ยวข้องกับฐานข้อมูลเกี่ยวข้องกับอัลกอริธึมการเพจ หลายคนได้เขียนเอกสารในส่วนนี้ และดูเหมือนว่าจะไม่มีอะไรจะพูดคุยกัน ด้วยการเปลี่ยนการแสดงข้อมูล อัลกอริธึมการเพจที่ดีขึ้นจะสามารถนำมาใช้ได้ มาดูกันว่าเราจะทำได้ดีกว่านี้หรือไม่
ก่อนอื่นเรามาพูดถึงวิธีการบางอย่างที่มีอยู่ก่อน
วิธีหนึ่งคือการเพจผ่าน DataGrid วิธีนี้เป็นวิธีที่ง่ายที่สุด แต่ไม่มีประสิทธิภาพ และจำเป็นต้องอ่านข้อมูลทั้งหมดที่อยู่ด้านหน้าข้อมูลที่ต้องการ
วิธีที่สองคือการเติมวิธีการเพจของ DataSet โดยการระบุบันทึกเริ่มต้นและหมายเลขบันทึก DbDataAdapter.Fill วิธีนี้ยังง่าย แต่ก็ไม่ได้มีประสิทธิภาพเช่นกัน และจำเป็นต้องอ่านข้อมูลทั้งหมดที่อยู่ด้านหน้าข้อมูลที่ต้องการ
ประการที่สามคือการเลือกบันทึกที่ต้องการจากตรงกลางของตารางผ่านการเรียงลำดับหลายรายการและการเรียงลำดับหลายรายการ เพื่อป้องกันไม่ให้ข้อมูลบนหน้าที่ติดกันซ้ำจำเป็นต้องใช้ not in ซึ่งจะทำให้ข้อมูลส่วนท้ายของ ตารางที่มีข้อมูลจำนวนมากให้เลือก ประสิทธิภาพของฐานข้อมูลจะลดลงอย่างมาก
สมมติว่าเราเปลี่ยนรูปแบบการนำเสนอของตาราง โดยนำการนำเสนอแบบตารางที่มีแถบเลื่อนในแอปพลิเคชัน C/S แบบดั้งเดิมมาเป็นตัวอย่าง จริงๆ แล้ว วิธีนี้เป็นวิธีการนำเสนอที่เหมาะสมที่สุดสำหรับตารางฐานข้อมูล และวิธีการนำเสนอที่ใช้กันทั่วไปใน แอปพลิเคชันเว็บ วิธีการเชื่อมต่อหมายเลขหน้า 1,2,3... หรือวิธีแถบเรียกดูหมายเลขหน้าของปุ่มหน้าก่อนหน้าและหน้าถัดไปเป็นทางเลือกสุดท้าย เนื่องจากเทคโนโลยีอย่างง่ายไม่สามารถใช้กับแถบเลื่อนในแอปพลิเคชันเว็บได้ กริด
ตารางในฐานข้อมูลทั้งหมดมีคีย์หลักเพื่อแยกแยะเร็กคอร์ดที่แตกต่างกันในตาราง ข้อมูลใน Grid บนอินเทอร์เฟซผู้ใช้ก็มีคีย์หลักในทางตรรกะด้วย มิฉะนั้น ข้อมูลจะไม่ชัดเจนในแอปพลิเคชันส่วนใหญ่ เป็นไปไม่ได้ที่จะทราบคีย์หลักของข้อมูลที่อ่าน แม้ว่าแอปพลิเคชันบางตัวจะตั้งค่าไว้ แต่ก็รู้คีย์หลักของข้อมูลที่อ่าน แต่จริงๆ แล้วไม่ได้ใช้กับเพจจิ้ง คีย์หลักของข้อมูลที่อ่านคุณสามารถดำเนินการเพจได้อย่างง่ายดายมาก
อัลกอริทึมสำหรับหน้าแรกนั้นง่ายมาก
เลือกขนาดหน้าบนสุด * จากชื่อตารางเรียงตามคีย์หลัก
สำหรับตารางที่มีแถบเลื่อน ข้อมูลจะเลื่อนตามลำดับหน้าต่อหน้า แม้ว่าคุณจะลากแถบเลื่อน คุณก็สามารถเลื่อนหน้าทีละหน้าไปยังตำแหน่งที่เลือกได้ อัลกอริธึมสำหรับหน้าใหม่คือ
เลือกขนาดหน้าบนสุด * จากชื่อตารางโดยที่คีย์หลัก > คีย์หลักบันทึกต่อท้ายลำดับหน้าก่อนหน้าตามคีย์หลัก
หากใช้แคช ข้อมูลทั้งหมดจะต้องดาวน์โหลดเพียงครั้งเดียว และข้อมูลใหม่จะถูกดาวน์โหลดเฉพาะเมื่อเลื่อนไปที่ ในตอนท้าย
อัลกอริทึมนี้จำเป็นต้องรู้คีย์หลักของข้อมูลในตารางและนำข้อมูลคีย์หลักไปใช้กับเพจ สำหรับคีย์หลักหลายรายการและตารางที่เรียงลำดับแล้ว อัลกอริทึมจะเหมือนกัน แต่คำสั่งจะซับซ้อนกว่า ไม่เพียงแต่คุณสามารถเริ่มจากหน้าแรกเท่านั้น แต่คุณยังสามารถเริ่มจากหน้าสุดท้ายและเลื่อนไปข้างหน้าได้อีกด้วย
ประสิทธิภาพของอัลกอริธึมนี้ไม่มีปัญหา ไม่ว่าตารางจะใหญ่แค่ไหน บันทึกตำแหน่งที่เลือกก็เหมือนกัน จะเหมาะสมกว่าหากใช้วิธีเลือกเพจของหน้าแรก หน้าก่อนหน้า และหน้าถัดไป หน้าสุดท้ายและเหมาะสำหรับแถบเลื่อนมากกว่า
สำหรับตารางที่มีแถบเลื่อนโดยใช้อัลกอริทึมนี้ โปรดดูการสาธิตของเรา ที่ www.BizStruct.cn
เมื่อตั้งคำถาม โปรดพิจารณาสองประเด็นก่อน ไม่เช่นนั้นคุณอาจไม่ทราบถึงข้อดีของการรวมอัลกอริทึมนี้เข้ากับระบบของเรา:
อันดับแรก: อันไหนสะดวกกว่ากันระหว่างแบบฟอร์มใบสมัคร C/S แบบดั้งเดิมหรือแบบฟอร์มเพจบนเว็บ
ประการแรก ตารางที่มีแถบเลื่อนที่เราใช้งานจากตารางในแอปพลิเคชัน C/S แบบดั้งเดิมแตกต่างกันอย่างไร
คำอธิบายการตอบกลับ:
บางคำตอบระบุว่าการดำเนินการเช่น "ข้ามไปที่หน้า xx" ไม่สามารถใช้งานได้
แต่ลองคิดดู ในสภาพแวดล้อมแอปพลิเคชัน C/S ถ้าใครใช้วิธีการข้ามหน้าแบบนี้ ทุกคนจะพบว่ามันแปลกอย่างแน่นอน
ตารางที่มีแถบเลื่อนที่เรานำมาใช้นั้นเกือบจะเร็วเท่ากับแอปพลิเคชัน C/S ก่อนหน้าในสภาพแวดล้อม LAN และยังเร็วมากในสภาพแวดล้อม WAN อีกด้วย
"การดำเนินการข้ามไปที่ XX เพจ" ของเว็บแอปพลิเคชันเป็นทางเลือกสุดท้าย หากสามารถใช้ Grid ของแอปพลิเคชัน C/S แบบดั้งเดิมได้ ทำไมเราจึงควรใช้สิ่งนี้