بانک های اطلاعاتی رابطه ای از انديس ها برای پيدا کردن سريع اطلاعات و پاسخ به پرس و جو ها استفاده می کنند . ساختن يا حذف انديس ها بر روی کد ِ يک نرم افزار به ندرت تغييری ايجاد می کند اما ايجاد يک انديس مناسب برای جداول باعث افزايش سرعت به شکلی کاملا ً محسوس می شود . اگر انديس ها وجود نداشته باشند برای پيدا کردن مقادير در جداول می بايست تمام سطرها ، يک به يک بررسی شوند و اين کار زمان زيادی می خواهد . اين کار را 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