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 Index | Index شرطی |
| 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 سه معیار ثابت برای ارزیابی نمونهها هستند.