วิธีการนำเพจจิ้งไปใช้อย่างมีประสิทธิภาพ?


9

ฉันมีแบบสอบถามฐานข้อมูลซึ่งอาจส่งผลให้ชุดผลลัพธ์ขนาดใหญ่ ลูกค้าที่แสดงข้อมูลได้รับข้อมูลผ่านเครือข่ายดังนั้นแนวคิดก็คือการลดจำนวนข้อมูลที่ถ่ายโอนให้น้อยที่สุดโดยการดึงผลลัพธ์ 50 รายการแรกจากฐานข้อมูลและส่งไปยังลูกค้า จากนั้นฉันจะให้ความเป็นไปได้ที่จะข้ามไปยังหน้าสองเพื่อดึงผลลัพธ์ 50 รายการถัดไปเป็นต้น (คล้าย ๆ กับข้อเสนอของ Google)

คำถามคือวิธีที่มีประสิทธิภาพในการใช้เพจจิ้ง ฉันต้องการตรวจสอบให้แน่ใจว่า mssql ใช้แคชมากที่สุดเท่าที่จะเป็นไปได้และไม่ดำเนินการเดียวกันอีกครั้งทุกครั้งที่ฉันเปลี่ยนเพจ

มีลูกค้าจำนวนมากที่กำลังสืบค้นฐานข้อมูลในเวลาเดียวกัน โปรแกรม sql ที่ใช้: MS SQL 2005

ความคิดของฉันคือ:

  • ใช้ statemenst ของ sql ที่เตรียมไว้เพื่อให้แน่ใจว่ามีการแชร์แผนปฏิบัติการ
  • ใช้ตัวแปร ROW_COUNT เพื่อดึงเฉพาะแถวที่ต้องการ

แต่มันเป็นวิธีที่มีประสิทธิภาพที่สุดจริง ๆ หรือ? หรือคุณคิดว่าจะเป็นการดีกว่าที่จะดึงชุดผลลัพธ์ทั้งหมดและนำเพจจิ้งไปใช้ในโค้ดที่ส่งข้อมูลไปให้ลูกค้า

ขอบคุณสำหรับเคล็ดลับ!

ขอแสดงความนับถือโทมัส

คำตอบ:


7

แบบสอบถามจะถูกดำเนินการทุกครั้ง SQL Server ไม่แคชผลลัพธ์

การเพจที่เหมาะสมจะไม่ถูกนำไปใช้จนกว่า SQL Server 2011 แต่จนกว่าจะถึงตัวเลือกของคุณ (ตามที่คุณระบุ) คือ:

  • ROW_NUMBER () และข้อความค้นหาตามต้องการ
  • การแคชไคลเอ็นต์

คำสั่ง SQL ที่เตรียมไว้จะถูกดำเนินการทุกครั้งเช่นกัน

หากคุณมีไคลเอนต์ที่อ้วนการแคชจะเป็นโลคัลกับไคลเอ็นต์ นี่เป็นเรื่องปกติถ้าคุณมีตัวอย่างหลายล้าน blobs

ในเว็บไคลเอ็นต์ของเราเราแสดงผลลัพธ์ทั้งหมด แต่แสดงเฉพาะ 100 อันดับแรกและมีปุ่ม "แสดงทั้งหมด" แทนที่จะขยาย DIV ที่ซ่อนอยู่ด้วยแถว 101+ เราไม่แคชในเว็บเซิร์ฟเวอร์และเราไม่ได้เสนอเพจจิ้ง


ขอบคุณ และวิธีการที่ดีกว่าคืออะไรหากผู้ใช้เปลี่ยนเกณฑ์การเรียงลำดับ ฉันควรดำเนินการค้นหาอีกครั้งด้วยเกณฑ์ใหม่หรือเรียงลำดับผลลัพธ์บนไคลเอนต์หรือไม่
Tomas Walek

1
ฉันจะเรียงลำดับในไคลเอนต์ ข้อมูลมีอยู่แล้ว ใช่ฐานข้อมูลดีในการเรียงลำดับ แต่ถ้าข้อมูลเหมือนกันและพร้อมใช้งานเหตุใดจึงทำการโทรอีกครั้ง? เราใช้ jQuery add-on เพื่อเปิดใช้งานการจัดเรียงในเบราว์เซอร์ :-)
gbn

4

มันขึ้นอยู่กับสภาพแวดล้อมของคุณ ฉันจะตั้งค่าการทดสอบโดยใช้ทั้งสองวิธีและดูว่าแบบไหนดีที่สุดสำหรับคุณ โดยส่วนตัวแล้วฉันจะเพจบนเซิร์ฟเวอร์ ข้อมูลน้อยกว่าสายและข้อมูลน้อยลงใน RAM ของลูกค้าดีกว่า หากคุณสามารถควบคุมข้อมูลจำเพาะของเครื่องไคลเอนต์การรับส่งข้อมูลทั้งหมดจะผ่าน LAN ที่ไม่ได้รับการตอบสนองและไคลเอนต์จะเลื่อนดูหน้าหลาย ๆ หน้าอย่างรวดเร็วจากนั้นคุณอาจต้องไปที่หน้าไคลเอนต์


ขอบคุณ ฉันต้องการทั้งสองอย่างจริง: การสื่อสารระหว่างเซิร์ฟเวอร์และไคลเอนต์นั้นมีการใช้งานใน WCF ดังนั้นจึงมีขนาดสูงสุดสำหรับข้อความและหากชุดผลลัพธ์เกินขนาดนี้ฉันต้องส่งข้อความเพิ่มเติมเพื่อถ่ายโอนข้อมูลทั้งหมดไปยังไคลเอนต์ ลูกค้าชอบที่จะ
เลื่อนดู
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.