أساسيات LIMIT وOFFSET وتقسيم الصفحات
قسّم مجموعات النتائج الكبيرة إلى صفحات باستخدام LIMIT وOFFSET، وافهم مفاضلات الأداء، واستخدم تقسيم الصفحات بالمفتاح لتصفح مستقر.
أساسيات LIMIT وOFFSET وتقسيم الصفحات درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
LIMIT: تحديد حجم النتيجة
تُرجع LIMIT n عددًا لا يتجاوز n من الصفوف:
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10;OFFSET: تخطي أول N صفوف
تتخطى OFFSET k أول k من الصفوف:
-- Rows 11–20 (the second page of 10):
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10 OFFSET 10;ترقيم الصفحات = LIMIT + OFFSET
النمط التقليدي للترقيم باستخدام أرقام الصفحات:
-- Page p (1-based), page size s:
SELECT * FROM articles
ORDER BY published_at DESC
LIMIT s OFFSET (p - 1) * s;لماذا يصبح OFFSET بطيئًا
يستمر OFFSET في قراءة كل صف يتم تخطيه داخليًا:
- الصفحة 1 من 10 ← تُقرأ 10 صفوف
- الصفحة 1000 من 10 ← تُقرأ 10,000 صف
- الصفحة 1,000,000 ← تُقرأ عشرة ملايين صف
يتعقّد OFFSET بمقدار O(offset). لذلك يصبح غير قابل للاستخدام في الصفحات العميقة.
ترقيم الصفحات بالمفتاح ("طريقة البحث")
انتقلوا إلى الصفحة التالية عبر تذكّر آخر مفتاح فرز تمت رؤيته:
-- First page:
SELECT * FROM articles
ORDER BY published_at DESC, id DESC
LIMIT 20;
-- Next page — pass the last seen (published_at, id):
SELECT * FROM articles
WHERE (published_at, id) < ($1, $2)
ORDER BY published_at DESC, id DESC
LIMIT 20;لماذا يكون الترقيم بالمفتاح أسرع
يستخدم الترقيم بالمفتاح فحصًا لنطاق الفهرس: ينتقل مباشرةً إلى الصف الذي يلي آخر صف تمت رؤيته، ويقرأ N صفوف، ثم ينتهي. وتكون التكلفة O(حجم الصفحة)، بصرف النظر عن عمق الصفحة.
يكون LIMIT من دون ORDER BY غير حتمي
قاعدة عامة: اربطوا LIMIT دائمًا بـ ORDER BY. وإلا فقد تُرجع قاعدة البيانات صفوفًا مختلفة في كل استدعاء.
-- Wrong — results may vary between runs:
SELECT * FROM events LIMIT 10;
-- Right:
SELECT * FROM events ORDER BY id DESC LIMIT 10;الإجماليات الكلية وترقيم الصفحات
تحتاج واجهة المستخدم أحيانًا إلى العدد الإجمالي للصفوف. ويُعد استعلام COUNT(*) منفصل أبسط حل، لكنه قد يكون مكلفًا في الجداول الكبيرة:
SELECT COUNT(*) FROM articles WHERE author_id = $1;
-- Alternative for huge tables: estimate from pg_class.reltuples or use approximate counts.FETCH FIRST (SQL القياسي)
صيغة SQL القياسية المكافئة لـ LIMIT:
SELECT * FROM products
ORDER BY id
FETCH FIRST 10 ROWS ONLY;
-- With offset:
-- OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLYالمؤشرات لمجموعات النتائج الضخمة
لتصدير ملايين الصفوف، استخدموا مؤشر قاعدة بيانات أو برنامج تشغيل يدعم البث بدلًا من حلقات LIMIT/OFFSET:
BEGIN;
DECLARE big_cursor CURSOR FOR
SELECT * FROM events ORDER BY id;
FETCH 1000 FROM big_cursor;
-- ...
CLOSE big_cursor;
COMMIT;متى يكون OFFSET مناسبًا
يكون OFFSET مناسبًا للصفحات القليلة العمق (الصفحات 1–10 في واجهة المستخدم)، أو للجداول الصغيرة. أما للترقيم العميق، أو التمرير اللانهائي، أو واجهات API، فاستخدموا الترقيم بالمفتاح.
مراجعة
يُستخدم LIMIT وOFFSET لترقيم مجموعات النتائج.
- اربطوهما دائمًا بـ ORDER BY
- يصبح OFFSET بطيئًا مع زيادة العمق — انتقلوا إلى الترقيم بالمفتاح للصفحات الكبيرة
- يُعد FETCH FIRST المكافئ القياسي
تحقق سريع
ما الطريقة الأكثر كفاءة للترقيم عند الانتقال بعمق داخل جدول كبير؟
الأسئلة الشائعة
هل درس «أساسيات LIMIT وOFFSET وتقسيم الصفحات» مجاني؟
نعم — نص درس «أساسيات LIMIT وOFFSET وتقسيم الصفحات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات LIMIT وOFFSET وتقسيم الصفحات»؟
قسّم مجموعات النتائج الكبيرة إلى صفحات باستخدام LIMIT وOFFSET، وافهم مفاضلات الأداء، واستخدم تقسيم الصفحات بالمفتاح لتصفح مستقر. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «أساسيات LIMIT وOFFSET وتقسيم الصفحات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- اختيار الأعمدة والتعبيرات
- مرشحات WHERE: عوامل المقارنة والمنطق
- ترتيب عمود واحد أو عدة أعمدة باستخدام ORDER BY
- أساسيات LIMIT وOFFSET وتقسيم الصفحات