بانک های اطلاعاتی رابطه ای از اندیس ها برای پیدا کردن سریع اطلاعات و پاسخ به پرس و جو ها استفاده می کنند . ساختن یا حذف اندیس ها بر روی کد ِ یک نرم افزار به ندرت تغییری ایجاد می کند اما ایجاد یک اندیس مناسب برای جداول باعث افزایش سرعت به شکلی کاملا ً محسوس می شود . اگر اندیس ها وجود نداشته باشند برای پیدا کردن مقادیر در جداول می بایست تمام سطرها ، یک به یک بررسی شوند و این کار زمان زیادی می خواهد . این کار را 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
GravatarµiladWwW
جمعه ساعت 10:14 , 12/7/1387
عمو! اینقدر خوشحالم که بیشتر کامپیوتری مینویسی که نگو!
Gravatarحامد بنايی
جمعه ساعت 18:21 , 12/7/1387
اميدوارم مفيد باشد
Gravatarw
پنج شنبه ساعت 04:28 , 30/8/1387
wwww
Gravatarفاطمه
سه شنبه ساعت 16:14 , 21/7/1388
سلام يه سوال داشتم چه جوري ميشه مقدار يه فيلد auto increment رو بعد از دستور insert پيدا كرد؟
Gravatarحامد بنایی
سه شنبه ساعت 21:11 , 21/7/1388
از SCOPE_IDENTITY() استفاده کنید.
نام :   
ايميل :      اين سايت از سيستم گراواتر استفاده می کند ، اگر در گراواتر دارای کد کاربری هستيد می توانيد از آن آدرس ايميل استفاده کنيد.  
وب سايت :   
ديدگاه :   
عدد زير را وارد کنيد :
  


  پيام شما بعد از بازبينی افزوده خواهد شد.