فصل 8 از 24 درس 1 از 1

ORDER BY، TOP و مرتب‌سازی نتایج

ORDER BY، TOP و مرتب‌سازی نتایج

بخشی از آموزش جامع SQL Server

محتوای درس ORDER BY، TOP و مرتب‌سازی نتایج

T-SQL | Sorting، Pagination و Deterministic Order

SQL Server بدون ORDER BY ترتیب Result Set را تضمین نمی‌کند. Sorting باید بر اساس نیاز Consumer و با Tie-breaker پایدار طراحی شود، به‌خصوص زمانی که Pagination وجود دارد.

متن این فصل با رویکرد مرجع فنی و قابل استفاده در پروژه واقعی تنظیم شده است؛ مثال‌ها در امتداد مدل StoreDb نوشته شده‌اند و اصطلاحات اصلی SQL Server و T-SQL به‌صورت یکدست به‌کار می‌روند.

1. مفاهیم و قراردادهای اصلی

SQL Server بدون ORDER BY ترتیب Result Set را تضمین نمی‌کند. Sorting باید بر اساس نیاز Consumer و با Tie-breaker پایدار طراحی شود، به‌خصوص زمانی که Pagination وجود دارد.

در طراحی پایگاه داده، Syntax تنها بخشی از مسئله است. نوع داده، Constraint، الگوی دسترسی، Transaction و هزینه اجرای Query باید هم‌زمان با نیاز Domain در نظر گرفته شوند.

مفهومکارکرد
ORDER BYمرتب‌سازی خروجی
ASCصعودی
DESCنزولی
TOPمحدود کردن Row
OFFSETرد کردن Row
FETCHدریافت Page

2. ساختار و Syntax پایه

Sort اصلی و Tie-breaker یکتا کنار هم نوشته می‌شوند. TOP همراه ORDER BY معنا پیدا می‌کند و Pagination با OFFSET/FETCH برای Pageهای متعارف قابل پیاده‌سازی است.

SELECT TOP (10)
    Id, Name, Price
FROM dbo.Products
WHERE IsActive = 1
ORDER BY Price DESC, Id ASC;

3. سناریوی StoreDb

فهرست محصولات با PageNumber و PageSize روی Id یا ترکیب Sort انتخاب‌شده و Id صفحه‌بندی می‌شود. ترتیب کاملاً یکتا از جابه‌جایی Row میان Pageها جلوگیری می‌کند.

نمونه‌های این فصل بر مدل فروشگاهی StoreDb بنا شده‌اند تا ارتباط مفاهیم میان فصل‌ها حفظ شود و Queryها در یک Context یکپارچه قابل بررسی باشند.

DECLARE @PageNumber int = 2;
DECLARE @PageSize int = 20;

SELECT Id, Name, Price
FROM dbo.Products
ORDER BY Name, Id
OFFSET (@PageNumber - 1) * @PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY;

4. اصول طراحی و Performance

طراحی پایدار باید هم صحت داده و هم هزینه اجرای عملیات را پوشش دهد. انتخاب ساده‌تر زمانی ترجیح دارد که Contract داده را روشن‌تر و رفتار Optimizer را قابل پیش‌بینی‌تر نگه دارد.

  • ORDER BY روی Columnهای موردنیاز Consumer انجام شود.
  • برای Pageهای عمیق Keyset Pagination قابل بررسی است.
  • Index با Sort پرتکرار هماهنگ شود.
  • TOP بدون ORDER BY برای «اولین» رکورد منطقی استفاده نشود.

5. خطاهای رایج و نکات ایمنی

دستورهای SQL می‌توانند مستقیماً داده و ساختار را تغییر دهند؛ بنابراین بازبینی Context، تعداد Rowهای هدف و اثر Transaction قبل از اجرای تغییرات اهمیت عملی دارد.

  • اعتماد به ترتیب Clustered Index بدون ORDER BY.
  • Pagination با Sort غیر یکتا.
  • OFFSET بسیار بزرگ بدون اندازه‌گیری.
  • مرتب‌سازی روی Expression پرهزینه در حجم بالا.

6. چک‌لیست نهایی فصل

  • Order صریح است.
  • Tie-breaker یکتا وجود دارد.
  • TOP و Pagination رفتار پایدار دارند.
  • Sort پرتکرار از نظر Index بررسی شده است.

7. جمع‌بندی

خروجی این فصل باید به تصمیمی قابل اتکا در طراحی یا Query منجر شود؛ صحت داده، قابلیت نگهداری و رفتار Performance سه معیار ثابت برای ارزیابی نمونه‌ها هستند.