بازیابی سند - قسمت دوم

اندیس گذاری

در مبحث ذخیره و بازیابی اطلاعات، اندیس ها از نقش مهمی برخوردار هستند. اندیس های به طور کلی باعث افزایش سرعت در انجام برخی عملیات ها روی حجم عظیم داده ها میشوند. هر چند از طرفی کاهش سرعت اجرای برخی دیگر از عملیات های را به دنبال دارند. برای مثال، هنگام افزودن داده های جدید یا حذف برخی داده های، اندیس ها به تغییر نیاز دارند و همین امر موجب کاهش سرعت اجرای اعمال افزودن و حذف می شود در حالی که اعمال جست و جو و مرتب سازی بهبود قابل ملاحظه ای پیدا میکنند.

انتخاب روش اندیس گذاری به ساختار سیستم اطلاعاتی  بستگی دارد. برای مثال روشهای اندیس گذاری در یک پایگاه داده، یک موتور جست و جو یا یک فرهنگ لغت متفاوت است.
  •  در یک پایگاه داده بین اهمیت ذخیره سازی و بازیابی موازنه بر قرار است و باید در عین افزایش سرعت برخی عملیات ها به کمک اندیس گذاری، اثرات سوء آن را در سایر اعمال در نظر داشت.
  • در موتور جست و جو، سرعت جست و جو بسیار مهمتر است و عملیات جمع آوری اطلاعات و اندیس گذاری می تواند با سرعت کمتری صورت گیرد.
  • در فرهنگ لغت با اطلاعات پابداری رو به رو هستیم که پس از ارائه تغییرات ناچیزی ( اگر نگوییم هیچ! ) خواهد داشت و می توانید به روش اندیس گذاری پیچیده تر و زمان برتری فکر کنیم.

ابتدا به بررسی اندیس گذاری در پایگاه های داده رابطه ای می پردازیم:

اندیس گذاری در پایگاه های داده رابطه ای
در پایگاه های داده ی رابطه ای، اندیس ها را ساختمان های داده ای تعریف میکنند که در بهبود سرعت بازیابی اطلاعات نقش دارند. پیاده سازی این ساختمان های داده در پایگاه های داده مختلف، متفاوت است. اما نکته مشترک بین آنها این است که همگی بر اساس یک فیلد ایجاد میشوند. در واقع اندیس به یک فیلد نسبت داده میشود. اندیس با توجه به نوع خود، اطلاعات مربوط به آن فیلد را در ساختار خود ذخیره میکند و به این ترتیب به جای عملیات روی فیلد، به عنوان یک لیست، عملیات روی فیلد به عنوان یک ساختار پیشرفته تر صورت میگیرد.
برای مثال :
به تصویر زیر نگاه کنید.


در ابتدا یک جدول حاوی هشت رکورد با فیلدهای شناسه، نام و نمره در اختیار داریم و می خواهیم آنها را اندیس گذاری کنیم. برای اندیس گذاری از این روش استفاده میکنیم:
از فیلد نام برای اندیس گذاری استفاده میکنیم. رکورد ها را به صورت الفبایی بر اساس فیلد نام مرتب میکنیم و هر سه تای آنها را در یک گروه قرار میدهیم. در هر گروه فیلد نام و شناسه ذخیره می شوند. سپس شماره هر گروه و مقدارآخرین فیلد نام آن گروه را در یک لیست ذخیره میکنیم.
حالا فرض کنیم به دنبال رکوردی می گردیم که فیلد نام در آن برابر Reza باشد. ابتدا به لیست گروها نگاه میکنیم و می بینیم که این رکورد باید در گروه دو باشد، چون Reza از نظر الفبایی از آخرین فیلد نام در گروه 1 بزرگتر است. پس به سراغ اعضای گروه دو می رویم و با جست و جو باینری ( به خاطر مرتب بودن عناصر امکان پذیر است ) رکورد مورد نظر خود را پیدا می کنیم و به کمک شناسه رکورد، رکورد مرتبط با آن در جدول مشخص میشود.
اگر از اندیس گزاری استفاده نمی کردیم باید هر هشت رکورد را بررسی میکردیم. می توانید فایده این عملیات را برای جدولی به چند میلیون رکورد تصور کنید!
اما همیشه یک اندیس کافی نیست.به دو دلیل نیاز به چند اندیس برای یک جدول وجود دارد:
1- مقادیر تکرار: اگر فیلد نام تکراری باشد، یعنی مثلا دوتا رکورد با فیلد نام Reza داشته باشیم. در این صورت اندیس دوم برای مقادیر تکراری استفاده میشود. مثلا فیلد ها بر اساس نام اندیس گذاری میشوند و برای نام های یکسان، از فیلد نمره برای اندیس گذاری آنها استفاده میشود.
2- پرس و جو و مرتب سازی تنها بر اساس فیلد نام بهبود یافته است. که باز هم با چند فیلد اندیس گذاری شده، این بهبود ها را در مورد آنها نیز شاهد خواهیم بود.

اما اندیس گذاری همیشه مفید نیست و اگر در انتخاب فیلد برای اندیس دقت نکنیم با نتیجه عکس روبه رو خواهیم شد. 
در قسمت بعد به این مطلب می پردازیم.