بعد الاختبار، عند الاستعلام عن الصفحة 100000 من بين 14483461 سجلًا، مع 10 سجلات لكل صفحة بترتيب تصاعدي وتنازلي، المرة الأولى هي 0.47 ثانية، والمرة الثانية هي 0.43 ثانية. بناء جملة الاختبار كما يلي: مدعوم من vevb.com
exec GetRecordFromPage news,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
يبدأ
تعيين @strTmp = '<(اختر دقيقة'
تعيين @strOrder = 'ترتيب حسب [' + @fldName + '] تنازلي'
نهاية
آخر
يبدأ
تعيين @strTmp = '>(اختر الحد الأقصى'
تعيين @strOrder = 'ترتيب حسب [' + @fldName +'] تصاعدي'
نهاية
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)
يذهب