مفهوم Index و تاثیر آن بر روی برنامه
سلام
مطلب رو با مثال زیر شروع میکنم :
مطمئناً همه ما دفتر تلفنهایی که در گوشه صفحه اونها تقسم بندی ( در اینجا الفبایی ) وجود داره رو دیدیم .
عملکرد این بخش امکان دسترسی سریعتر به اطلاعات هستش . در دیتا بیس به نوعی این عملکرد رو Index انجام میده ولی با تفاوتهایی خاص
Index الزاماً عدم پیمایش کل رکوردها رو به همراه نداره . به سناریوهای زیر توجه کنید :
رکورد مورد بحث در آخرین ردیف قرار داره ( که البته برای وقوع همیشگی این مورد دیگه باید دیوار خیلی کوتاهی داشته باشید )
ولی دومین امر تنظیمات دو گانه Index هستش . در حالتی که مجوز تکرار داده شده باشه ( Duplicates OK ) پروسه پیمایش همچنان تا آخرین رکورد ادامه پیدا میکنه در واقع شما با انتخاب حالت No Duplicates هست که به اکسس این اطمینان خاطر رو میدید که به اولین رکورد مورد نظر که رسیدی دیگه به دنبال رکورد دیگه ای نگرد حال این رکورد میتونه :
در ردیف اول باشه ( افزایش سرعت بسیار بالا در دیتابیسی با تعداد رکورد زیاد )
در اواسط باشه ( افزایش سرعت قابل توجه در دیتابیسی با تعداد رکورد زیاد )
در انتها باشه ( شاهد هیچ افزایش سرعتی نباشیم بلکه تا حدودی نیز شاهد کندی عملیات نیز باشیم )
توضیح : حالت سوم کندتر به دلیل اینکه در هر صورت عمل پیمایش تا انتها ادامه می یابد ولی اینبار پروسه متب سازی نیز به سیستم تحمیل شده است .
اعمالی که باعث بی تاثیری و ناکارمدی Index میشه تعدد Index های یک جدول و اینکه Index بر روی چه چیزی گذاشته شده هستش . ( به طور مثال از دید من Index گذاری مبلغ منطقی نیست )
با هم به مثال دفتر تلفن رجوع میکنم :
تقسیم بندی های دفتر تلفن تا وقتی ارزشمنده که گروههای انتخابی نه خیلی بزرگ و نه خیلی کوچیک باشن به طور مثال در یک دفتر تلفن استاندارد حرف الف در یک گروه , حرف ب در یک گروه و ... قرار میگیرن حالا تصور کنید که تقسم بندی این دفتر تلفن رو خیلی خرد کنیم و برای نبیل پیروزمهر یک صفحه و برای X و Y هم هر یک , یک صفحه رو در نظر بگیریم . در این حالت Index گذاری به عنوان یک ضد سیستم عمل میکنه و نبودش بهتر از بودنشه .
امری که منع میشه تعدد فیلدهای شاخص گذاری شده هستش .
به نظرم Index گذاری باعث کاهش سرعت در دیتا بیسی با تعداد رکورد کم نمیشه .
مبحث Index یکی از مباحث پایه ای دیتا بیسها هستش و اطلاع از نحوه رفتار این خصیصه میتونه در ارائه یک برنامه کارآمد تاثیر گذار باشه .
پی نوشت :
در کنار مشخصه Index مولفه دیگه ای وجود داره با نام Primary Key
این دو مشخصه دارای فصل مشترکی زیادی هستند و لیکن تفاوتهای اختصاصی زیر رو با هم دارند
Primary Key اشاره به يك موجوديت منحصر به فرد داره ، مقدار Null رو هم نمي پذيره ( در حالت ساده ، مجوز خالي بودن فيلد رو نميده )
Indexed Field عملكردي مشابه با همون Primary Key داره ( در حالت No Duplicate ) با اين تفاوت كه اجازه مقدار Null رو در فيلد ميده
بر همين اساس اگر قصد داريد كنترل كاملي بر روي عدم تكرار يك فيلد داشته باشيد بايد از Primary Key استفاده كنيد ، چرا كه Index تنها در حالتي كه مقداري در داخل فيلد وارد شده باشه بر روي عدم تكراري بودن نظارت ميكنه
معمولا از Index بر روي فيلدهايي استفاده ميشه كه بيشتر مورد جستجو قرار ميگيرند