مهدی عادلی فر
بنیانگذار توسینسو و برنامه نویس

ایندکس چیست؟ بررسی مفهوم Index گذاری در پایگاه داده به زبان ساده

اندیس گذاری چیست؟ چند نوع Indexing یا اندیس گذاری وجود دارد؟ بانک های اطلاعاتی و مخصوصاً بانک های اطلاعاتی رابطه‌ای از مکانیزم های مختلفی برای ذخیره سازی و بازیابی اطلاعات استفاده می کنند. این مکانیزم ها باید به اندازه کافی سریع باشند تا بتوان در کمترین زمان ممکن داده  ها را بر روی دیسک و با یک ساختار درست ذخیره کرد و همچنین بتوان در داخل آن‌ها با سرعت بالا جستجو کرد و داده‌های مورد نظر را پیدا کرده و لود کنیم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

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

ایندکس گذاری چیست؟ بررسی مفهوم Indexing

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

در کل منظور از ایندکس گذاری این است که شاخصی را مشخص کنیم که به راحتی و با جستجوی کمتر به داده‌های مورد نیاز خودمان دسترسی داشته باشیم. حال در دیتابیس هم می‌توانیم درداخل جدول بر روی ستون‌های پرکاربرد عمل ایندکس گذاری را انجام دهیم تا دسترسی و جستجو بر روی آن ستون‌ها افزایش یابد. ایندکس گذاری در داخل ستون‌های جدول سرعت را تا چند برابر افزایش می دهد. 

ایندکس گذاری در پایگاه داده به چه شکل انجام می شود؟

پایگاه های داده‌ای امروزی معمولاً ایندکس ها را به صورت درخت B-tree و یا B-tree+ ذخیره می کنند. که این کار باعث می‌شود که دسترسی به یک ایندکس خاص به صورت جستجوی دودویی یا (binary search) انجام شود و در سریع‌ترین زمان ایندکس مورد نظر پیدا شود.در دیتابیس هایی مانند sql server عمل ایندکس گذاری  به دو روش عمده انجام می‌شود روش clustered, non-clustered. هرکدام از این روش‌ها را در ادامه توضیح داده ایم.

روش ایندکس گذاری non-clustered

در این روش سیستم مدیریت دیتابیس یا DBMS یک درخت B-Tree از ستون ایندکس شده تشکیل می‌دهد. داده‌های مربوط به جداول در یک فضا به نام heap ذخیره سازی شده اند. حال درخت b-tree مربوط به ایندکس ها به گونه‌ای ساخته شده است که هرکدام از برگ‌ها یک اشاره گر به داده‌های ایندکس شده در داخل heap دارند. این به این معنی است که در برگ‌ها داده‌های اصلی ذخیره نشده‌اند و فقط یک اشاره گر به داده اصلی ذخیره شده است. اگر بخواهیم یک مثال از این نوع ایندکس بزنیم می‌توانیم فهرست مطالب یک کتاب را مثال بزنیم. در فهرست مطالب یک کتاب ایندکس ها فقط حاوی شماره صفحه مطلب مورد نظر هستند. یعنی شماره صفحه یک اشاره گر به اطلاعات اصلی است.

ایندکس چیست؟ بررسی مفهوم Index گذاری در پایگاه داده به زبان ساده

روش ایندکس گذاری clustered

این روش به این صورت است که در درخت B-tree تشکیل شده در قسمت برگ‌های درخت داده‌های مستقیم ایندکس قرار می‌گیرد و مانند روش قبلی نیست که یک اشاره گر به داده اصلی باشد و خود داده اصلی در آن قرار دارد. مثال دفترچه تلفن در دنیای واقعی می‌تواند یک نمونه از این ایندکس گذاری باشد که وقتی شما به دنبال شماره یک شخص می گردید و حرف اول نام او را در دفترچه باز می‌کنید در آن قسمت شماره خود مخاطب ذخیره شده است و نه شماره صفحه‌ای که مخاطب در آن قرار دارد.حال که دو روش عمده ایندکس گذاری را توضیح دادیم در ادامه به مزایا و معایب هرکدام اشاره می کنیم.

مزایای روش clustered

این روش به خاطر اینکه در B-tree ذخیره شده است در جستجو هایی که به  صورت بازه ای انجام می‌شود بسیار مفید است. برای مثال زمانی که شما در کوئری خود از کلمه between برای یک ستون استفاده می‌کنید و قصد دارید که یک بازه مشخص را جستجو کنید این روش بسیار خوب کار می کند. همچنین در حالت‌هایی که می‌خواهیم ستون هایی با مقدار بزرگ‌تر یا کوچکتر از یک مقدار را جستجو کنیم این نوع ایندکس گذاری کاربرد خواهد داشت و از مزایای آن حالتی است که تعداد رکوردهای  نتیجه جستجو زیاد است و رکوردها تکراری نیستند(distinct)

معایب روش clustered

از معایبی که این روش دارد می‌توان به این نکته اشاره کرد که در یک جدول فقط می‌توانیم یک عدد از این نوع ایندکس داشته باشیم. همچنین این نوع ایندکس برای ستون هایی که در معرض تغییر و آپدیت هستند نیز مناسب نیست. علت آن هم این است که در هر بار تغییر مقدار ستون باید درخت دوباره سازی شود.

مزایای روش non clustered

از مزایای این روش این است که می‌توان چندین ایندکس non-clustered در یک جدول ساخت و استفاده کرد. همچنین این روش برای جستجو های با نتایج کم بسیار خوب کار می‌کند و همچنین جستجوهایی که به دنبال مساوی بودن هستند نیز در این روش خوب کار می کند.

حرف آخر

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


مهدی عادلی فر
مهدی عادلی فر

بنیانگذار توسینسو و برنامه نویس

مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.

نظرات