หลังการทดสอบ เมื่อค้นหาหน้า 100,000 จาก 14483461 ระเบียน โดยมี 10 รายการต่อหน้าตามลำดับจากน้อยไปมากและจากมากไปน้อย ครั้งแรกคือ 0.47 วินาที และครั้งที่สองคือ 0.43 วินาที ไวยากรณ์การทดสอบมีดังนี้: ขับเคลื่อนโดย vevb.com
ผู้บริหาร GetRecordFromPage ข่าว, newsid, 10,100000
news คือชื่อตาราง newsid คือฟิลด์สำคัญ โปรดจัดทำดัชนี newsid ก่อนเมื่อใช้งาน
คัดลอกรหัสรหัสดังต่อไปนี้:
-
ชื่อฟังก์ชัน: GetRecordFromPage
ฟังก์ชั่น: รับข้อมูลของหน้าที่ระบุ
คำอธิบายพารามิเตอร์: ชื่อตาราง @tblName ที่มีข้อมูล
ชื่อฟิลด์คีย์ @fldName
@PageSize จำนวนบันทึกต่อหน้า
@PageIndex หมายเลขหน้าที่ต้องการรับ
@OrderType ประเภทการเรียงลำดับ 0 - ลำดับจากน้อยไปหามาก 1 - ลำดับจากมากไปน้อย
@strWhere เงื่อนไขการสืบค้น (หมายเหตุ: ไม่ต้องเพิ่มตำแหน่ง)
ผู้เขียน : กำปั้นเหล็ก
อีเมล์: [email protected]
เวลาที่สร้าง: 2006-07-04
เวลาที่แก้ไข: 2006-07-04
-
สร้างขั้นตอน GetRecordFromPage
@tblName varchar(255) -- ชื่อตาราง
@fldName varchar(255) -- ชื่อฟิลด์
@PageSize int = 10, -- ขนาดหน้า
@PageIndex int = 1, -- หมายเลขหน้า
@OrderType bit = 0, -- ตั้งค่าประเภทการเรียงลำดับ ค่าที่ไม่ใช่ 0 จะเรียงลำดับจากมากไปน้อย
@strWhere varchar(2000) = '' -- เงื่อนไขการสืบค้น (หมายเหตุ: ไม่ต้องเพิ่มตำแหน่ง)
เช่น
ประกาศ @strSQL varchar(6000) -- คำสั่งหลัก
ประกาศ @strTmp varchar(1000) -- ตัวแปรชั่วคราว
ประกาศ @strOrder varchar(500) -- ประเภทการเรียงลำดับ
ถ้า @OrderType != 0
เริ่ม
set @strTmp = '<(เลือกขั้นต่ำ'
set @strOrder = ' สั่งซื้อโดย [' + @fldName + '] desc'
จบ
อื่น
เริ่ม
set @strTmp = '>(เลือกสูงสุด'
set @strOrder = ' สั่งซื้อโดย [' + @fldName +'] asc'
จบ
set @strSQL = 'เลือกด้านบน ' + str(@PageSize) + ' * จาก ['
+ @tblName + '] โดยที่ [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) จาก (เลือกด้านบน ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] จาก [' + @tblName + ']' + @strOrder + ') เป็น tblTmp)'
+ @strOrder
ถ้า @strWhere != ''
set @strSQL = 'เลือกด้านบน ' + str(@PageSize) + ' * จาก ['
+ @tblName + '] โดยที่ [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) จาก (เลือกด้านบน ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] จาก [' + @tblName + '] โดยที่ ' + @strWhere + ' '
+ @strOrder + ') เป็น tblTmp) และ ' + @strWhere + ' ' + @strOrder
ถ้า @PageIndex = 1
เริ่ม
ตั้ง @strTmp = ''
ถ้า @strWhere != ''
ตั้ง @strTmp = ' โดยที่ (' + @strWhere + ')'
set @strSQL = 'เลือกด้านบน ' + str(@PageSize) + ' * จาก ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
จบ
ผู้บริหาร(@strSQL)
ไป