شرح صفوف ومحتوى الفقرة
عند تقسيم النتائج إلى صفحات (Pagination)، يعمل الأسلوب التقليدي LIMIT 20 OFFSET 0 بسرعة في الصفحة الأولى، لكن عندما ينتقل المستخدم إلى صفحة بعيدة مثل LIMIT 20 OFFSET 100000، فإن محرك MySQL يضطر لقراءة وفرز 100,020 صفاً كاملةً ثم يرمي أول 100,000 صف في سلة المهملات ليرجع لك 20 صفاً فقط!
الحل الهندسي المعتمد في المنصات الكبرى هو التصفح بالمؤشر أو المفتاح (Keyset / Seek Pagination):
- بدلاً من تمرير رقم الإزاحة
OFFSET، نحتفظ بآخر قيمة مفتاح أساسي ظهرت في الصفحة الحالية (مثلاًlast_order_id = 400000). - نطلب الصفحة التالية بالشرط
WHERE order_id < 400000 ORDER BY order_id DESC LIMIT 20. - يقفز المحرك عبر شجرة الفهرس العنقودي مباشرةً إلى المعرّف
400000ويقرأ20صفاً فقط في أقل من ملي ثانية بغض النظر عن عمق الصفحة!
SQL
SELECT order_id, customer_id, total_amount FROM orders WHERE order_id < 400000 ORDER BY order_id DESC LIMIT 20;