انتقل إلى المحتوى
أمين أبوزيد
درس مخطط لهMID-013-L06

إعادة كتابة استعلامات تفيد الأداء

  • الدرس 6 من 8
  • Mid-level
في هذا الدرس 4 موضوعات

هذا الدرس مخطط له. يعرض المخطط أدناه الموضوعات التي سيغطيها، ولم يُنشر الدرس الكامل بعد.

نص الدروس والتمارين باللغة الإنجليزية، بينما تبقى واجهة الموقع وعناوين الدروس بالعربية.

في هذا الدرس

apply common rewrites that make queries index-friendly.

الموضوعات المخطط لها

  • No function on an indexed column: WHERE created_at >= '2026-01-01' AND created_at < '2026-02-01', not date_trunc(...) = ... (or add an expression index).
  • Keyset pagination (WHERE (created_at, id) < (?, ?) ORDER BY ... LIMIT n) instead of deep OFFSET.
  • Select only needed columns; avoid SELECT *.
  • EXISTS instead of IN (big subquery) or COUNT(*) > 0.
  • Fix N+1 from the ORM at the source with a join or batch fetch (details in MID-021).
تفاصيل المخطط المبدئي

عرض عملي

sql
-- slow: OFFSET 500000 reads and discards 500k rows
-- fast:
SELECT * FROM orders WHERE (created_at, id) < ($1, $2)
ORDER BY created_at DESC, id DESC LIMIT 20;

اختبر فهمك

Why is OFFSET 500000 slow?

أظهر الإجابة

PostgreSQL must produce and throw away all skipped rows.

التطبيق

طبّق هذا الدرس بمختبر الوحدة وتمارينها واختبارها.

المختبر والتمارين الاختبار

تعليم الدرس كمكتمل اختياري ويمكنك التراجع عنه في أي وقت. يبقى تقدمك محفوظًا في هذا المتصفح.

اكتب للبحث في المستويات والمراحل والوحدات والدروس.