نقدم أولاً العديد من طرق الترحيل الرئيسية والبيانات الأساسية، ثم نعطي الاستنتاج مباشرةً، ويمكن للقراء المهتمين إلقاء نظرة على البيانات التالية للعديد من طرق ترحيل الإجراءات المخزنة شائعة الاستخدام.
طريقة TopN
حدد Top(@PageSize) من TableName حيث المعرف ليس موجودًا
(حدد المعرف العلوي ((@PageIndex-1)*@PageSize) من اسم الجدول حيث .... الترتيب حسب ...)
حيث .... الطلب حسب ...
طاولة مؤقتة
انسخ رمز الكود كما يلي:
أعلن @indextable table(id int الهوية(1,1),nid int,PostUserName nvarchar(50))
أعلن @PageLowerBound int
أعلن @PageUpperBound int
اضبط @PageLowerBound=(@pageindex-1)*@pagesize--الحد الأدنى
تعيين @PageUpperBound=@PageLowerBound+@pagesize--الحد الأعلى
قم بتعيين عدد الصفوف @PageUpperBound
أدخل في @indextable(nid,PostUserName) حدد ResponseID,PostUserName من ترتيب TableName بواسطة ......
حدد * من TableName p,@indextable t حيث p.ID=t.nid
وt.id>@PageLowerBound وt.id<=@PageUpperBound بترتيب t.id
بناء جملة CTE--2005 الجديد يشبه الجداول المؤقتة، لكن دورة الحياة مختلفة قليلاً، وهذا مجرد تطبيق له.
باستخدام cte_temp--تحديد جدول الوقت الصفري، PageIndex هو حقل محسوب يقوم بتخزين رقم الصفحة لنتائج البحث.
كـ (ceiling((Row_Number() over(order by .... )-1)/@pagesize as int) كـ PageIndex،* من TableName حيث .....)
حدد * من cte_temp حيث pageindex=@pageindex-1;
ختاماً:
يكون TopN هو الأسرع عندما يكون عدد الصفحات صغيرًا، وإذا كان أقل من 10 صفحات، فيمكنك التفكير في استخدامه، حيث تستهلك أوقات الجدول المؤقتة وCTE وقتًا أطول من الجدول المؤقت، ولكنها لن تسبب ذلك tempdb إلى الارتفاع و IO في الزيادة.
مقارنة الأداء
بيئة الاختبار: win2003server، Sqlserver2005، حجم المكتبة 2,567,245 صفًا، لا يوجد شرط حيث، حجم الصفحة 50 أثناء الاختبار، رقم الصفحة كمتغير
خذ 0، 3، 10، 31، 100، 316، 1000، 3162... صفحة، وهو مؤشر 10. نتائج الاختبار هي كما يلي
عدد الصفحاتTopN CTE جدول مؤقت (مع ذاكرة تخزين مؤقت) جدول مؤقت (بدون ذاكرة تخزين مؤقت)
تحسينات الإجراء المخزن CTE التي تستخدمها الشركة
1 3 12 10 101 457 7302
3 15 7 79 5524 464 7191
10 127 5504 88 3801 464 6116
32 588 9672 122 3601 976 7602
100 4680 9738 166 4235 486 7151
316 45271 9764 323 3867 522 7255
1000 لاغ 9806 869 2578 635 8948
3162 لاغ 9822 2485 4110 12460 8210
10000 لاغ 9754 7812 11926 14250 7359
31623 لاغ 9775 18729 33218 15249 7511
100000 لاغ لاغ 31538 55569 17139 6124
تفسير وتحليل البيانات
يتم تقسيم الجداول المؤقتة إلى نوعين من الوقت: ذاكرة التخزين المؤقت أم لا هي الطريقة المذكورة أعلاه، حيث يؤدي تحسين CTE إلى تقليل عدد الأعمدة المحددة في الجدول المؤقت CTE فقط لا يمكن حساب الوقت (الوقت طويل جدًا)، وحدة البيانات هي ميلي ثانية.
ومن البيانات المذكورة أعلاه يمكننا أن نرى أن TopN يتمتع بمزايا في أول 32 صفحة، ولكن مع زيادة عدد الصفحات، ينخفض الأداء بسرعة، ويكون تحسن CTE أفضل من CTE، بمتوسط تحسن حوالي ثانيتين، ولكن لا يزال أفضل من الجدول المؤقت، ولكن بالنظر إلى أن الجدول المؤقت سيزيد من حجم ملف السجل ويسبب الكثير من عمليات الإدخال والإخراج، فإن CTE له أيضًا مزاياه الخاصة، كما أن الإجراء المخزن الذي تستخدمه الشركة حاليًا فعال للغاية ، لكن الأداء سينخفض عندما يكون رقم الصفحة لاحقًا.