لماذا يعد ترقيم الصفحات مكلفًا جدًا للموارد؟

StackOverflow https://stackoverflow.com/questions/29580

  •  09-06-2019
  •  | 
  •  

سؤال

إنها واحدة من تلك الأشياء التي يبدو أن لها منحنى غريب حيث كلما فكرت فيها أكثر، كلما أصبحت منطقية أكثر.إلى حد ما، بطبيعة الحال.وبعد ذلك لا معنى لي على الإطلاق.

الرعاية لتنوير لي؟

هل كانت مفيدة؟

المحلول

لأنه في معظم الحالات يتعين عليك فرز نتائجك أولاً.على سبيل المثال، عندما تبحث في جوجل، يمكنك عرض ما يصل إلى 100 صفحة فقط من النتائج.لا يهتمون بالفرز حسب تصنيف الصفحات الذي يتجاوز 1000 موقع ويب لكلمة رئيسية معينة (أو مجموعة من الكلمات الرئيسية).

ترقيم الصفحات سريع.الفرز بطيء.

نصائح أخرى

لوبوس هذا صحيح، المشكلة ليست في حقيقة أنك تقوم بالترحيل (وهو ما يأخذ كمية هائلة من البيانات من السلك)، ولكن في أنك بحاجة إلى معرفة ما يحدث بالفعل على الصفحة..

حقيقة أنك بحاجة إلى الصفحة تعني أن هناك الكثير من البيانات.يستغرق فرز الكثير من البيانات وقتًا طويلاً :)

هذا سؤال غامض حقا.سنحتاج إلى مثال ملموس للحصول على فكرة أفضل عن المشكلة.

يبدو أن هذا السؤال تمت الإجابة عليه بشكل جيد، لكنني سأضيف شيئًا صغيرًا خاصًا بـ MySQL لأنه يلفت انتباه الكثير من الأشخاص:

تجنب استخدام SQL_CALC_FOUND_ROWS.ما لم تكن مجموعة البيانات تافهة، فسيكون حساب المطابقات واسترداد عدد x من المطابقات في استعلامين منفصلين أسرع كثيرًا.(لو أنه يكون تافهة، بالكاد ستلاحظ الفرق في كلتا الحالتين.)

اعتقدت أنك تقصد ترقيم الصفحات من الصفحة المطبوعة - هذا هو المكان الذي قطعت فيه أسناني.كنت سأدخل في حوار شخصي رائع حول جمع كل محتوى الصفحة، وتحديد الموقع (عدد كبير من القواعد هنا، والمحركات المحدودة مفيدة جدًا) والتبرير...ولكن يبدو أنك كنت تتحدث عن عملية تنظيم المعلومات على صفحات الويب.

لذلك، أعتقد أن عدد زيارات قاعدة البيانات.الوصول إلى القرص بطيء.وبمجرد حفظها في الذاكرة، يصبح الفرز رخيصًا.

بالطبع يستغرق الفرز على استعلام عشوائي بعض الوقت، ولكن إذا كنت تواجه مشكلات مع نفس الاستعلام المرقّم الذي يتم استخدامه بشكل منتظم، فإما أن هناك خطأ ما في إعداد قاعدة البيانات (فهرسة غير صحيحة/لا شيء على الإطلاق، ذاكرة قليلة جدًا وما إلى ذلك).أنا لست مدير قاعدة بيانات) أو أنك تقوم بترقيم الصفحات بشكل خاطئ للغاية:

خطأ فادح:على سبيل المثالعمل select * from hugetable where somecondition; في مصفوفة تحصل على عدد الصفحات باستخدام المصفوفة. الطول، اختر الفهارس ذات الصلة وقم بإلغاء المصفوفة - ثم كرر ذلك لكل صفحة...وهذا ما أسميه خطأ جسيما.

الحل الأفضل سؤالين:واحد يحصل على العد فقط ثم آخر يحصل على النتائج باستخدام limit و offset.(قد يكون لدى بعض خوادم SQL غير القياسية خيار استعلام واحد، لا أعلم)

قد يعمل الحل السيئ في الواقع بشكل جيد على الجداول الصغيرة (في الواقع ليس من المستبعد أن يكون أسرع على الجداول الصغيرة جدًا، لأن الحمل الزائد لإجراء استعلامين أكبر من الحصول على جميع الصفوف في استعلام واحد.أنا لا أقول ذلك يكون لذلك...) ولكن بمجرد أن تبدأ قاعدة البيانات في النمو تصبح المشاكل واضحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top