اندیس گذاری چیست؟ چند نوع Indexing یا اندیس گذاری وجود دارد؟ بانک های اطلاعاتی و مخصوصاً بانک های اطلاعاتی رابطهای از مکانیزم های مختلفی برای ذخیره سازی و بازیابی اطلاعات استفاده می کنند. این مکانیزم ها باید به اندازه کافی سریع باشند تا بتوان در کمترین زمان ممکن داده ها را بر روی دیسک و با یک ساختار درست ذخیره کرد و همچنین بتوان در داخل آنها با سرعت بالا جستجو کرد و دادههای مورد نظر را پیدا کرده و لود کنیم.
واضح است که همه اطلاعات ذخیره شده در پایگاه داده به یک اندازه مهم و پرکاربرد نیستند و بعضی خیلی استفاده میشوند و ممکن است که به بعضی از آنها حتی سالی یک بار هم مراجعه نکنیم. به همین دلیل اگر بتوانیم کاری کنیم که اطلاعات پرکاربرد سریعتر لود شوند و عمل جستجو در آنها سریعتر باشد سرعت برنامهها هم بالاتر خواهد رفت و مشتری هم راضی تر خواهد بود. یکی از مواردی که در بالا رفتن سرعت لود و جستجوی دادهها در بانک اطلاعاتی میشود عمل اندیس گذاری یا ایندکس گذاری یا Indexing می باشد.
در دنیای واقعی از ایندکس گذاری بسیار استفاده میشود امروزه همه کتابهایی که نوشته و چاپ میشوند دارای فهرست مطالب هستند و حتی برخی فهرست اشکال و واژه نامه هم دارند. همچنین اگر شما یک دیکشنری دست بگیرید متوجه میشوید که هر حرف از کدام صحفه شروع شده است. همچنین اگر هنوز هم از دفتر تلفن استفاده میکنید متوجه میشوید که شماره تلفنها به ترتیب الفبا در محل حروف مورد نظر نوشته شده اند. این مثالها همه نوعی ایندکس گذاری هستند.
در کل منظور از ایندکس گذاری این است که شاخصی را مشخص کنیم که به راحتی و با جستجوی کمتر به دادههای مورد نیاز خودمان دسترسی داشته باشیم. حال در دیتابیس هم میتوانیم درداخل جدول بر روی ستونهای پرکاربرد عمل ایندکس گذاری را انجام دهیم تا دسترسی و جستجو بر روی آن ستونها افزایش یابد. ایندکس گذاری در داخل ستونهای جدول سرعت را تا چند برابر افزایش می دهد.
پایگاه های دادهای امروزی معمولاً ایندکس ها را به صورت درخت B-tree و یا B-tree+ ذخیره می کنند. که این کار باعث میشود که دسترسی به یک ایندکس خاص به صورت جستجوی دودویی یا (binary search) انجام شود و در سریعترین زمان ایندکس مورد نظر پیدا شود.در دیتابیس هایی مانند sql server عمل ایندکس گذاری به دو روش عمده انجام میشود روش clustered, non-clustered. هرکدام از این روشها را در ادامه توضیح داده ایم.
در این روش سیستم مدیریت دیتابیس یا DBMS یک درخت B-Tree از ستون ایندکس شده تشکیل میدهد. دادههای مربوط به جداول در یک فضا به نام heap ذخیره سازی شده اند. حال درخت b-tree مربوط به ایندکس ها به گونهای ساخته شده است که هرکدام از برگها یک اشاره گر به دادههای ایندکس شده در داخل heap دارند. این به این معنی است که در برگها دادههای اصلی ذخیره نشدهاند و فقط یک اشاره گر به داده اصلی ذخیره شده است. اگر بخواهیم یک مثال از این نوع ایندکس بزنیم میتوانیم فهرست مطالب یک کتاب را مثال بزنیم. در فهرست مطالب یک کتاب ایندکس ها فقط حاوی شماره صفحه مطلب مورد نظر هستند. یعنی شماره صفحه یک اشاره گر به اطلاعات اصلی است.
این روش به این صورت است که در درخت B-tree تشکیل شده در قسمت برگهای درخت دادههای مستقیم ایندکس قرار میگیرد و مانند روش قبلی نیست که یک اشاره گر به داده اصلی باشد و خود داده اصلی در آن قرار دارد. مثال دفترچه تلفن در دنیای واقعی میتواند یک نمونه از این ایندکس گذاری باشد که وقتی شما به دنبال شماره یک شخص می گردید و حرف اول نام او را در دفترچه باز میکنید در آن قسمت شماره خود مخاطب ذخیره شده است و نه شماره صفحهای که مخاطب در آن قرار دارد.حال که دو روش عمده ایندکس گذاری را توضیح دادیم در ادامه به مزایا و معایب هرکدام اشاره می کنیم.
این روش به خاطر اینکه در B-tree ذخیره شده است در جستجو هایی که به صورت بازه ای انجام میشود بسیار مفید است. برای مثال زمانی که شما در کوئری خود از کلمه between برای یک ستون استفاده میکنید و قصد دارید که یک بازه مشخص را جستجو کنید این روش بسیار خوب کار می کند. همچنین در حالتهایی که میخواهیم ستون هایی با مقدار بزرگتر یا کوچکتر از یک مقدار را جستجو کنیم این نوع ایندکس گذاری کاربرد خواهد داشت و از مزایای آن حالتی است که تعداد رکوردهای نتیجه جستجو زیاد است و رکوردها تکراری نیستند(distinct)
از معایبی که این روش دارد میتوان به این نکته اشاره کرد که در یک جدول فقط میتوانیم یک عدد از این نوع ایندکس داشته باشیم. همچنین این نوع ایندکس برای ستون هایی که در معرض تغییر و آپدیت هستند نیز مناسب نیست. علت آن هم این است که در هر بار تغییر مقدار ستون باید درخت دوباره سازی شود.
از مزایای این روش این است که میتوان چندین ایندکس non-clustered در یک جدول ساخت و استفاده کرد. همچنین این روش برای جستجو های با نتایج کم بسیار خوب کار میکند و همچنین جستجوهایی که به دنبال مساوی بودن هستند نیز در این روش خوب کار می کند.
عمل ایندکس گذاری یک ابزار بسیار مناسب برای بالا بردن سرعت استخراج اطلاعات است به شرطی که به درستی انجام شود. یعنی باید انواع جستجو ها و کوئری هایی را که در سیستم ما نوشته و پیادهسازی شده است را بررسی کنیم و ببینیم که کدام ستونها مورد جستجو بیشتر قرار گرفتهاند سپس عمل ایندکس گذاری را بر روی آن ستونها انجام دهیم تا بتوانیم سرعت و کارایی سیستم را افزایش دهیم.با وب سایت tosinso همراه باشید
بنیانگذار توسینسو و برنامه نویس
مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود