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

Index و Performance

Index و Performance

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

محتوای درس Index و Performance

SQL Server | Clustered، Nonclustered و Execution Plan

Index مسیر دسترسی به Rowها را تغییر می‌دهد و می‌تواند Read را سریع‌تر کند، اما Storage و هزینه Write را افزایش می‌دهد. Performance با Measurement، Statistics و Execution Plan تحلیل می‌شود.

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

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

Index مسیر دسترسی به Rowها را تغییر می‌دهد و می‌تواند Read را سریع‌تر کند، اما Storage و هزینه Write را افزایش می‌دهد. Performance با Measurement، Statistics و Execution Plan تحلیل می‌شود.

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

مفهومکارکرد
Clustered Indexساختار اصلی Row
Nonclustered Indexساختار دسترسی جدا
INCLUDEپوشش Column خروجی
Filtered IndexIndex شرطی
Statisticsتوزیع داده
Execution Planبرنامه اجرای Query

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

Index بر اساس Predicate، Join و Sort پرتکرار طراحی می‌شود. ترتیب Keyها و Columnهای INCLUDE از Query Pattern پیروی می‌کند، نه از فهرست همه Columnها.

CREATE INDEX IX_Orders_CustomerId_OrderDate
ON dbo.Orders(CustomerId, OrderDate DESC)
INCLUDE (TotalAmount, Status);

3. سناریوی StoreDb

Query سفارش‌های یک Customer در بازه تاریخ با Index ترکیبی روی CustomerId و OrderDate بررسی می‌شود. Actual Execution Plan و IO/Time برای مقایسه قبل و بعد استفاده می‌شود.

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

SET STATISTICS IO ON;
SET STATISTICS TIME ON;

SELECT Id, OrderDate, TotalAmount, Status
FROM dbo.Orders
WHERE CustomerId = 42
  AND OrderDate >= '2026-01-01'
ORDER BY OrderDate DESC;

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

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

  • Index برای Workload واقعی ساخته شود.
  • Key باریک و Selective بودن Prefix در نظر گرفته شود.
  • Indexهای مشابه/تکراری بازبینی شوند.
  • Statistics و Fragmentation بر اساس Evidence نگهداری شوند.

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

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

  • ساخت Index برای هر Column.
  • فرض اینکه Missing Index Suggestion همیشه صحیح است.
  • نادیده گرفتن هزینه Update/Insert.
  • SARGability ضعیف و سرزنش Index.

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

  • Query پرتکرار با Plan واقعی بررسی شده است.
  • Index Key مطابق Predicate/Sort است.
  • Write Cost در نظر گرفته شده است.
  • Statistics و IO/Time برای Measurement استفاده می‌شوند.

7. جمع‌بندی

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