اندیس گذاری یا index در پایگاه داده و انواع آن
index در پایگاه داده چیست؟
Index یا اندیس مفهومی است که در تمامی جنبههای زندگی به صورت مستقیم و غیرمستقیم مورد استفاده قرار دارد : فهرست مطالب در یک کتاب، ترتیب پلاک خانهها، ترتیب کلمات در یک واژهنامه و … تمام این موارد مثالهایی از اندیس گذاری یا ایندکس گذاری هستند. index کردن در واقع راهی است برای بهینه سازی عملکرد یک پایگاه داده با به حداقل رساندن تعداد دسترسیهای مورد نیاز دیسک هنگام پردازش یک query است.
هدف از اندیس گذاری، فراهم کردن شرایطی است که با کمترین جستجو و به سادگی به یک دادهی مشخص دسترسی پیدا کنیم.
برای رسیدن به این هدف در یک پایگاه داده میتوانیم در یک جدول روی ستونهای پرکاربرد ایندکس گذاری کنیم تا دسترسی و جستجو روی دادههای این ستونها سادهتر و سریعتر انجام شود. ایندکس گذاری اشتباه و یا عدم ایندکس گذاری بر روی پایگاههای داده یکی از شایعترین علل کندی جستجوها در پایگاههای داده می باشند .
انواع اندیس گذاری در پایگاههای داده:
روشهای مختلفی برای ایندکس گذاری در یک پایگاه داده وجود دارد. امروزه در پایگاههای دادهای به صورت رایج ایندکس گذاری به روش درخت B-tree انجام میشود که باعث سرعت گرفتن روند جستجو میشود و در این حالت دسترسی به یک اندیس مشخص به صورت جستجوی دودویی یا Binary search انجام میشود.
روشهای دیگری نیز برای این کار وجود دارد به عنوان مثال در پایگاههای دادهای مانند sql server استفاده از روشهای clustered و non-clustered بسیار رایج است. این روشهای اندیس گذاری را در ادامه به اختصار توضیح میدهیم :
روش درخت B-tree:
درخت Balanced Tree یا به اختصار B-Tree ، یک درخت متوازن است، منظور از بالانس یا تعادل در این درخت به این معناست که تعداد عناصر یا دادههای دو طرف برابر هستند.
این درخت از نوع دودویی نیست و از پایین بالا کامل و از بالا به پایین خوانده میشود. یعنی در واقع ریشههای درخت در بالا و برگهای آن در پایین قرار میگیرد.
در شکل زیر یک B-tree و نحوه قرار گرفتن دادهها در آن مشاهده میشود :
دوره پییشنهادی : تراکنش در پایگاه داده چیست؟
روش خوشهای Clustered index:
در روش کلاستر ایندکس، همهی دادههای یک جدول با یک ترتیب مشخص به صورت فیزیکی در هارد دیسک ذخیره خواهند شد از این رو یک جدول فقط یک کلاستر ایندکس دارد که برای تمام دادهها اعمال میشود. برای توضیح مفهوم این روش از مثال سادهی یک دفترچه تلفن استفاده میکنیم. در یک دفترچه تلفن شمارههای افراد بر اساس ترتیب حروف الفبا قرار گرفته است و با پیدا کردن نام یک شخص به صورت مسقیم میتوانید به شمارهی ان شخص دست پیدا کنید.
این ایندکس به صورت اتوماتیک بر روی همه جداول و بر اساس کلید اصلی بر روی پایگاه داده ایجاد می شود.
در شکل زیر یک Clustered index و نحوه قرار گرفتن دادهها در آن مشاهده میشود:
مزایای روش index clustered:
این روش برای جستجوهایی که به صورت بازهای هستند بسیار کارآمدتر است چرا که در B-Tree ذخیره شده است. دیگر مزیت این روش این است که زمانی که میخواهیم جستجو را به صورت مقایسهای از ستونهای بزرگتر یا کوچکتر از یک مقدار مشخص انجام دهیم کاربردیتر است مخصوصا زمانی که تعداد دادهها زیاد است و دادهی تکراری نداریم.
معایب روش index clustered:
متاسفانه این روش برای ستونهایی که تغییر میکنند و به روزرسانی دارند مناسب نیست چرا که با هر تغییر تمام دادهها باید دوباره مرتبسازی شوند. همچنین در این حالت محدودیت ایندکس گذاری برای یک جدول داریم به این صورت که در یک جدول فقط یک نوع ایندکس گذاری وجود دارد که برای تمام دادهها اعمال میشود.
روش غیرخوشهای Nonclustered index:
این روش با ترتیب ذخیرهی دادهها کاری ندارد و تنها یک مقدار و pointer به دادهی مورد نظر اختصاص میدهد مانند لیست واژههای مهم در انتهای کتاب و شماره صفحاتی که این واژهها در آن کتاب به کار رفته است.
این ایندکس ها را طراح پایگاه داده با توجه به نیاز می تواند ایجاد کند. البته توجه داشته باشید که ایجاد ایندکس های Nonclustered باید توسط یک متخصص انجام شود چرا که در صورت ایندکس گذاری اشتباه، دسترسی به اطلاعات کندتر انجام خواهد شد.
در شکل زیر یک nonclustered index و نحوه قرار گرفتن دادهها در آن مشاهده میشود:
مزایای روش Nonclustered index:
از مزایای این روش میتوان به سریعتر شدن روند جستجو در دادهها و مرتب سازی سریعتر نتایج اشاره کرد. همچنین در این حالت ما محدودیتی برای اعمال تعداد ایندکس در یک جدول نداریم و میتوانیم از چندین ایندکس استفاده کنیم.
این روش برای جستجوهایی که مقایسه بین دادهها به دنبال تساوی است کارآمد میباشد.
معایب روش Nonclustered index:
این روش از روش index clustered کندتر است و برای جستجوهایی که نتایج زیادی دارند کاربردی نیست.
مقایسهی روشهای Clustered و Nonclustered:
به اختصار و برای جمعبندی چند تفاوت بین دو روش خوشهای و غیرخوشهای را بررسی میکنیم :
• ایندکسهای Nonclustered اختیاری و به نظر طراح پایگاه داده وابسته است ولی ایندکسهای clustered اجباری هستند و به صورت اتوماتیک روی جدول در پایگاه داده اعمال میشود.
• برای خواندن اطلاعات روش clustered و برای ویرایش و به روزرسانی دادهها روش nonclustered کارآمدتر است.
• در یک جدول میتوان چند ایندکس nonclustered داشت ولی ایندکس clustered تنها یکی قابل استفاده است.
• روش clustered اطلاعات را بر اساس کلید اصلی مرتب میکند ولی روش nonclustered در نظم داده-ها دخالتی ندارد.
• سرعت دسترسی به اطلاعات در ایندکس های clustered بیشتر است و در مقابل ایندکس-های nonclustered سرعت ویرایش و ذخیره سازی اطلاعات بیشتری دارند.
اهمیت ایندکس گذاری در پایگاه داده :
همان طور که متوجه شدید اندیس گذاری یا ایندکس گذاری در صورتی که به درستی انجام شود یک قابلیت مهم و مناسب برای تسریع روند استخراج اطلاعات است. این بزار به ما کمک میکند که بتوانیم جستجوها را با با دقت و کارآیی بیشتری مورد بررسی قرار دهیم.