ترکیب با OFFSET

ترکیب LIMIT و OFFSET در MySQL

در پایگاه‌داده‌های رابطه‌ای مانند MySQL، دو کلیدواژه LIMIT و OFFSET اغلب به‌صورت ترکیبی استفاده می‌شوند تا کنترل دقیق‌تری روی نتایج بازگشتی از کوئری‌ها داشته باشیم. این ترکیب به‌ویژه در پیاده‌سازی صفحه‌بندی (Pagination) داده‌ها بسیار حیاتی است.

توجه: OFFSET همیشه بعد از LIMIT در دستور SQL قرار می‌گیرد و ترتیب معکوس آن باعث خطای نحوی می‌شود.

نحوه عملکرد OFFSET

کلیدواژه OFFSET مشخص می‌کند که از چند رکورد ابتدایی باید صرف‌نظر شود. برای مثال:

  • LIMIT 10 OFFSET 0: 10 رکورد اول را برمی‌گرداند
  • LIMIT 10 OFFSET 10: از رکورد 11 تا 20 را نمایش می‌دهد
  • LIMIT 10 OFFSET 20: رکوردهای 21 تا 30 را استخراج می‌کند
مثال توضیح
SELECT * FROM products LIMIT 5 OFFSET 10 نمایش رکوردهای 11 تا 15 از جدول products
SELECT id, name FROM users LIMIT 20 OFFSET 40 نمایش 20 کاربر از رکورد 41 به بعد

کاربردهای عملی

ترکیب LIMIT و OFFSET در سناریوهای مختلفی کاربرد دارد:

  1. صفحه‌بندی نتایج: در سیستم‌های وب که داده‌ها به صفحات مختلف تقسیم می‌شوند
  2. نمایش تدریجی داده‌ها: مانند لود کردن محتوا هنگام اسکرول در صفحات بی‌نهایت
  3. نمونه‌گیری از داده‌ها: وقتی نیاز به بررسی بخشی از داده‌های بزرگ داریم

برای یادگیری عمیق‌تر درباره کلیدواژه LIMIT، می‌توانید اینجا را تماشا کنید.


ملاحظات عملکردی

استفاده از OFFSET در جداول بزرگ ممکن است باعث کاهش عملکرد شود، زیرا دیتابیس باید تمام رکوردهای قبل از OFFSET را نیز پردازش کند. در چنین مواردی، راهکارهای جایگزین مانند:

  • استفاده از WHERE با کلیدهای منحصر به فرد
  • به‌کارگیری cursor-based pagination
  • استفاده از indexed columns برای فیلتر کردن

می‌توانند کارایی بهتری ارائه دهند. همچنین در MySQL 8.0+ امکان استفاده از FETCH و OFFSET در ترکیب با پنجره‌ها (Window Functions) وجود دارد که انعطاف‌پذیری بیشتری ایجاد می‌کند.