OFFSET برای Pagination در دیتابیس همیشه انتخاب خوبی نیست؟در پروژههای کوچک این Query کاملاً طبیعی است:
SELECT * FROM posts ORDER BY id DESC LIMIT 20 OFFSET 100000
اما هرچه
OFFSET بزرگتر شود، دیتابیس ممکن است مجبور شود تعداد زیادی رکورد را بررسی و رد کند تا به بخش موردنظر برسد.برای دیتاستهای بزرگ، یکی از راهحلهای بهتر:
Cursor-based Pagination
مثلاً به جای:
OFFSET 100000
میتوان گفت:
WHERE id < last_seen_id
و سپس:
ORDER BY id DESC LIMIT 20
مزیت؟
⚡ مناسب برای Feedهای بزرگ
⚡ همچنین Performance پایدارتر
⚡ کاهش اسکن غیرضروری رکوردها
البته انتخاب بین Offset و Cursor به Use Case بستگی دارد؛ Cursor برای همه سناریوها جایگزین مستقیم Offset نیست.
قبل از انتخاب Pagination، به حجم داده و Query Plan فکر کنید.
@CodeVerse_dev