Indexing چیست؟
ساختار داده کمکی که دیتابیس برای پیدا کردن سریع ردیفها بدون اسکن کل جدول نگه میدارد — شبیه فهرست آخر کتاب.
چرا مهم است؟
بدون Index مناسب، دیتابیس برای هر Query مجبور است کل جدول را ردیفبهردیف بخواند (Table Scan)؛ روی جدولهای میلیونی همین تفاوت بین چند میلیثانیه و چند ثانیه پاسخ را میسازد.
تعریف
Index یک ساختار داده مرتبشده (معمولاً B-Tree) روی یک یا چند ستون است که به دیتابیس اجازه میدهد بهجای خواندن کل جدول، مستقیم به ردیف موردنظر برسد.
مثال
CREATE INDEX IX_Orders_CustomerId ON Orders(CustomerId);
-- این Query حالا بهجای Table Scan از Index Seek استفاده میکند
SELECT * FROM Orders WHERE CustomerId = 1024;
چه ستونهایی Index بگیرند؟
✔ ستونهای پرتکرار در WHERE، JOIN، ORDER BY ✔ کلید خارجی (Foreign Key) ✔ ستونهایی با تنوع مقدار بالا (Cardinality بالا)
هزینه Index
Index رایگان نیست: هر INSERT/UPDATE/DELETE باید Indexهای مرتبط را هم بهروزرسانی کند؛ Index بیشازحد روی جدولهای پرنوشتار، سرعت نوشتن را کم میکند.
اشتباه رایج
❌ گذاشتن Index روی هر ستون «برای احتیاط» بدون بررسی الگوی واقعی Query — هم فضای دیسک هدر میرود هم سرعت نوشتن کم میشود، بدون فایده واقعی برای خواندن.
منبع و مطالعه بیشتر
خلاصه
Index یک ساختار مرتبشده است که Query را از Table Scan به Index Seek سریع تبدیل میکند. روی ستونهای پرتکرار در WHERE/JOIN بگذارید، اما بدون بررسی الگوی واقعی Query روی همهچیز Index نگذارید. مرجع کامل: Microsoft Learn و use-the-index-luke.com.
