بانک های اطلاعاتی رابطه ای از اندیس ها برای پیدا کردن سریع اطلاعات و پاسخ به پرس و جو ها استفاده می کنند . ساختن یا حذف اندیس ها بر روی کد ِ یک نرم افزار به ندرت تغییری ایجاد می کند اما ایجاد یک اندیس مناسب برای جداول باعث افزایش سرعت به شکلی کاملا ً محسوس می شود . اگر اندیس ها وجود نداشته باشند برای پیدا کردن مقادیر در جداول می بایست تمام سطرها ، یک به یک بررسی شوند و این کار زمان زیادی می خواهد . این کار را scan کردن جداول می نامند . scan کردن همیشه یک فاجعه نیست ! ولی وقتی تعداد سطرهای جدول چندین هزار یا به میلیون ها سطر رسید به شدت بر روی کارایی سیستم تاثیر خواهد داشت .
فرض کنید جدولی داریم با سه ستون ، شماره محصول ، مبلغ و نام محصول که هیچ اندیسی روی آن وجود ندارد . اگر در یک جستجو بخواهیم محصولاتی که مبلغ آن بین دو عدد است را پیدا کنیم ، موتور جستجوی بانک اطلاعاتی می بایست تمام سطرها را برای این شرط بررسی کند تا ببیند کدام سطر در این شرط مورد نظر ما صدق می کند . اما اگر یک اندیس بر روی ستون مبلغ ایجاد شده باشد تمامی مقادیر آن مرتب خواهند بود و موتور جستجوی بانک اطلاعاتی به راحتی مبالغ مورد نظر را پیدا کرده و گزارش را تهیه می کند .
برای ستون هایی مانند کلید اصلی ، اندیس می بایست یکتا هم باشد ، یعنی نه تنها مقادیر آن مرتب شده باشد بلکه امکان داشتن مقدار تکراری نیز نداشته باشد . برای اینکه نرم افزار بانک اطلاعاتی بداند که یک مقدار تکراری است یا خیر می بایست کل سطرها را جستجو کند که وقتی یک ستون مرتب شده را بررسی می کند خیلی سریع تر به نتیجه می رسد .
Clustered Index :
دفترچه تلفن یک نمونه خوب از یک Clustered index است . هر مدخل در دفترچه تلفن نشان دهنده یک سطر در جدول می باشد . در جدول فقط می توان یک Clustered index داشت زیرا این نوع اندیس مکان فیزیکی سطرها را تغییر می دهد . سطرهای جدیدی که افزوده می شوند در مکانی بین سطرهای دیگر قرار می گیرد . البته مکان سطرهای بعد از سطر جدید تغییر نمی کند و این را با صفحه هایی که تعدادی سطر در آن جای می گیرند حل کرده اند . اگر صفحه ها پرشود صفحه های جدید ایجاد شده و با پوینتر ترتیب صفحه ها حفظ می شود .
کلید اصلی در یک دفترچه تلفن شماره تلفن افراد است زیرا نام و نام خانوادگی می تواند تکراری باشد ولی شماره تلفن خیر . معمولاً از کلید اصلی برای یک cluster استفاده می شود ولی در دفترچه تلفن به این شکل نیست . کلید cluster در دفترچه تلفن ترکیبی از نام خانوادگی و نام است .
چگونه تلفن یک شخص را در دفترچه تلفن پیدا می کنیم ؟ با نگاه به حروف چاپ شده کنار آن مستقیم به صفحه ای می رویم که نام خانوادگی شخص مورد نظر در آن نوشته شده است . سپس در آن صفحه دنبال ترکیب نام خانوادگی و نام شخص مورد نظر تمامی سطرهای را یک به یک نگاه می کنیم تا به هدف برسیم . این دقیقا ً روشی است در بانک های اطلاعاتی از آن استفاده می شود .
فرض کنید می خواهیم افرادی که نام آنها حامد است را پیدا کنیم . تمامی صفحه های دفترچه تلفن را باید ورق زد تا آنها را پیدا کرد . ستون دوم در اندیس از این نوع نیز به همین روش جستجو می شود . به این روش جستجو clustered index scan می گویند و می تواند بسیار زمان بر باشد .
Non-Clustered Index :
اندیس لغات آخر کتاب مشابه این نوع اندیس است . یک non-clustered index دارای ستون های اندیس شده و یک پوینتر به سطر مورد نظر می باشد . اگر در یک جدول چهار اندیس از نوع non-clustered index داشته باشیم اطلاعات آن اندیس ها چهار بار به شکل های مختلف ذخیره شده اند و این به معنی مصرف فضای بیشتر دیسک و کندی هنگام تغییر در سطرها است . در SQL Server می توان 249 اندیس از این نوع را تعریف کرد که اگر توجهی به باری که بر سیستم می افزاید نداشته باشیم منجر به کند شدن سیستم خواهد شد .
استفاده از اندیس ها برای ستونهایی که در جستجوها زیاد استفاده می شوند باعث افزایش سرعت پاسخگویی بانک اطلاعاتی و در نتیجه افزایش سرعت نرم افزار می شود .
منابع یک و دو و سه
Icons by http://dryicons.com