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

مطلب زیر تماما از تارنمای مجله اینترنتی سلام دنیا بازنشر میشود.

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

«فهرست‌گذاری (Indexing) در پایگاه‌داده‌ها روشی برای ارایه دسترسی سریع به مقادیر یک یا چند ستون است. این بهبود در بازیابی، در ازای هزینه بیشتر در هنگام تغییر/درج/حدف رکورد‌ها است. به بیانی دیگر، استفاده از فهرست، فرایند بازیابی (Retrieval) را سرعت می‌بخشد، ولی در هنگام حذف و اضافه و یا تغییر مقادیر، هم داده‌ها باید تغییر کند و هم فهرست باید به‌روز شود، و این به معنای هزینه بیشتر است.

به عنوان مثال، برای به‌دست آوردن رکورد حساب با داشتن شماره حساب، به جای آن که در بین تمامی حساب‌ها جستجو شود، سامانه پایگاه‌داده‌ها می‌تواند ابتدا به فهرست برای یافتن شماره بلوک دیسکی که رکورد مرتبط در آن است مراجعه کند و سپس تنها به آن بلوک دیسک مراجعه کرده و رکورد را استخراج کند.»

بیایید موضوع را با بحثی آغاز کنیم که اصولا چرا باید از فهرست‌گذاری در پایگاه‌های داده استفاده کنیم. برای فهم بیشتر این موضوع از مثالی ساده شروع می‌کنیم. فرض کنید که ما دارای جدولی در یک پایگاه‌داده‌ها فرضی و با نام  کارمند «Employee»  ساخته‌ایم؛ این جدول دارای سه ستون است که هر یک از ستون‌ها مشخص کننده ویژ‌گی‌های خاصی از یک کارمند است که به صورت ساده‌ای نام، سن و آدرس کارمندان در این فیلدها ذخیره می‌شود. به طور مشخص هر فیلد دارای نام‌های «Employee_Name»، «Employee_Age,» و «Employee_Address» در بانک اطلاعاتی هستند. حال اگر بخواهیم با استفاده از یک پرس‌وجو یا کوئری (Query) ساده به اطلاعات داخل آن جدول دست پیدا کنیم که نام آنان عیسی «Jesus» است باید پرس‌وجوی اس‌کیوال زیر را اجرا کنید.

SELECT * FROM Employee WHERE Employee_Name = 'Jesus'

در زمانی که از فهرست‌گذاری استفاده نکنیم؛ چه اتفاقی رخ خواهد داد؟

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

فهرست شاخص‌ها چه تاثیر بر کارایی پایگاه‌داده‌ها دارند؟

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

?

فهرست و شاخص چیست؟

برای درک بیشتر این موضوع که فهرست در پایگاه‌داده‌ها دقیقا چیست، بیایید یک دفترچه تلفن را در نظر بگیریم. برای یافتن اطلاعات و افرادی که در آن قرار دارند می توان آن افراد را دسته‌بندی کرد. معمولا در یک دفترچه تلفن ما آنان را در شاخه‌هایی با اسم اول فامیل آنان مشخص می‌کنیم که از الف تا ی دسته‌بندی شده است. حال در فهرستی از تمامی دسته‌بندی‌های انجام شده در اول آن مشخص شده‌است که افرادی که حرف اول نام خانوادگی آنان «ت» است در صفحات ۶ تا ۸ هستند. این فهرست برای دستیابی به اطلاعات ایجاد شده است و با دسته‌بندی آنان و معرفی مکان هر دسته، یافتن اطلاعات را آسان‌تر کرده‌ایم.

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

  • هنگامی که با جداول نسبتا کوچک سر و کار دارید شاخص‌ها کارایی زیادی ندارند.
  • به صورت کلی شاخص‌ها عملکرد را زمانی بهبود می بخشند که بر روی ستون‌هایی تعریف شوند که در الحاق «Join» جداول استفاده شده است.

چه نوع از ساختارهای داده‌ها را می‌توان به عنوان فهرست در نظر گرفت؟

در فهرست‌ها اطلاعات معمولا به شکل درخت بی (B-tree) نگاهداری می‌شود. بر اساس تعریفی که در ویکی‌پدیا فارسی از درخت بی ذکر شده است، در علوم کامپیوتر، یک درخت بی یا بی‌تری داده‌ساختاری درختی است که داده‌ها را به صورت مرتب‌شده نگه می‌دارد و جستجو، درج و حذف را در زمان مصرفی لگاریتمی میسر می‌سازد. بر خلاف درخت‌های جستجوی دودویی متوازن (Balanced binary search tree)، این داده‌ساختار برای سیستم‌هایی که بلاک‌های عظیم اطلاعات را خوانده و می‌نویسند بهینه‌سازی شده است. این داده‌ساختار معمولا در پایگاه‌های داده‌ها و سیستم پرونده استفاده می‌شود. (ویکی‌پدیا، دانشنامه آزاد)

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

فهرست جدول هش چگونه کار می‌کند؟

در علوم رایانه، جدول درهم‌سازی یا جدول «هش» نوعی ساختمان داده‌ها است که مقدارهایی که باید ذخیره شوند را به وسیله تابع هش (درهم‌سازی) با کلیدهای ویژه‌ای مرتبط می‌سازد. عملیات اولیه‌ای که این جدول تسهیل می‌کند عمل مراجعه است. به این معنی که کاربر می‌تواند با سرعتی کارآمد داده مورد نظرش را در آن بیابد. در جدول‌های هش همچنین افزودن داده‌های جدید در زمان کم امکان‌پذیر است. زمان لازم برای جستجو و افزودن وابسته به نوع جدول و میزان داده‌ها هستند. این زمان می‌تواند با انتخاب جدول مناسب به مرتبه زمانی O(1) برسد. (ویکی‌پدیا، دانشنامه آزاد)

جداول هش نیز نوع دیگری از ساختمان‌داده‌ها است که ممکن است برای فهرست‌گذاری برخی فهرست‌ها «Indexes» به کار رفته باشد. این فهرست‌ها معمولا با نام فهرست‌های هش شناخته می‌شوند. یکی از دلایل  که باعث استفاده از هش در فهرست شده‌است، به این دلیل است که در زمان‌هایی که تنها به جستجو در مقادیر نیاز داریم. استفاده از هش بسیار بهینه‌تر از دیگر روش‌ها است. بنابراین اجرای کوئری یا پرس‌وجوی دلخواه برای یافتن رشته‌ای مساوی رشته خاص و مورد نظر ما همانند مثال مذکور در اوایل مطلب بسیار سریع‌تر خواهد بود. برای نمونه اجرای کوئری ابتدای مقاله با استفاده از فهرست هش بر روی نام کارمند از جدول هش منفعت برده و با سرعت بهتری به نتیجه دلخواه خواهد رسید. به خاطر این موضوع، جداول هش به طور گسترده در نرم‌افزارها، به خصوص در آرایه‌های شرکت پذیر، ساختار فهرست پایگاه‌داده، حافظه‌های نهان و مجموعه‌ها استفاده می‌شوند.

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

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

“Jesus => 0x28939″

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

معایب فهرست درهم‌سازی در چیست؟

عیبی که برای جدول هش عنوان می‌کنند، مرتب نبودن اطلاعات در این روش است و همچنین تعداد زیادی از پرس‌وجو های مورد استفاده برای استفاده در پایگاه‌های داده وجود دارند که جداول هش کمکی در بهبود اجرای آنان ندارند. به عنوان نمونه، قصد دارید با استفاده از یک پرس‌وجوی ساده اس‌کیوال که اکثرا آن آشنایی دارید؛ به دنبال افرادی در کارمندان بگردید که سن آنان از ۴۰ سال کمتر باشد. در نظر بگیرید در جدول  فیلدی با نام سن-کارمند (Employee Age) نیز وجود دارد. آیا خواهید توانست این پرس‌وجو را با استفاده از روش جدول هش انجام دهید؟ خوب، این کار ممکن نیست؛ زیرا جدول هش در مواقعی کاربرد خوبی از خود نشان خواهد داد که بخواهید به دنبال موارد کاملا مشخصی چون همانند رشته یا رقم خاصی باشید مثلا عنوانی آیا مساوی با عبارت خاصی است یا آیا شباهت به آن عبارت دارد. (مشابه این عبارت بعد از کوئری انتخاب مشابه زیر)

WHERE name = ‘Jesus'

این موضوع به این دلیل رخ می‌دهد که چیزی که در داخل کلید جدول هش عنوان شده‌است برای دسترسی به آن داده است و علاوه بر آن هیچ گونه نظم و ترتیب خاصی در چینش آنان در داخل فهرست جدول هش وجود ندارد. بنابراین اگر بخواهید بر اساس ترتیب فیلد سن-کارمند در جدول هش به دنبال کارمندان زیر ۴۰ سال باشید، به دلیل آن که ترتیبی در فهرست جدول هش وجود ندارد. نمی‌توانید بگوید این افراد را به صورت سریع برایتان بیابد؛ همین دلیل است که باعث شده که جدول هش به عنوان یک داده‌ساختار پیش‌فرض برای فهرست‌گذاری در سامانه‌های مدیریت پایگاه‌داده‌ها استفاده نشود. به طور کلی جداول هش کارایی و انعطافی که داده‌ساختار درخت بی ارائه می‌کند را نداشته و به خوبی آن نیست. یکی از مشکلات جدول هش تصادم است. در مثال قبل اگر کلید ویژه دو نام متفاوت از ده‌هزار نام اولیه‌مان یکی می‌شد باید کدام را در خانه مربوطه آرایه ذخیره می‌کردیم؟ به این اتفاق تصادم گفته می‌شود.

فهرست چگونه کارایی را افزایش می‌دهد؟

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

حال بیایید تصور کنیم که در پایگاه‌داده‌ها خود یک فهرست با ساختمان‌داده‌ها درخت بی برای ستون نام-کارمند (Employee_Name) ساخته‌ایم. این به این معنی خواهد بود که اگر به دنبال کارمندی با نام عیسی «Jesus» گشتیم؛ این کار را توسط کوئری اس‌کیوال ساده‌ای که در اوایل مقاله نوشتیم انجام خواهیم داد. در این زمان برای جست‌وجو نیازی به پویش و جستجوی کل مقادیر برای یافتن نام کارمند مورد نظر «Jesus» نیست و در عوض پایگاه‌داده‌ها از فهرست برای یافتن کارمندی با نام عیسی «Jesus» استفاده خواهد کرد. به دلیل این که فهرست بر اساس حروف الفبا مرتب خواهد شد؛ جست‌وجو به دنبال فردی با نام عیسی بسیار سریع خواهد بود. فهرست فوق بر اساس حروف الفبا مرتب است و اگر به دنبال نام فردی مثلا عیسی «Jesus» بگردیم؛ این نام با حرف جی لاتین «J» آغاز شده است. در این زمان است که فهرست مرتب شده به کار می‌آید و به جای این که پایگاه‌داده‌ها در تمامی جدول به دنبال آن فرد باشد؛ تنها در آن افرادی جست‌وجو را انجام خواهد داد که حرف اول آنان جی «J» است. همچنین در داخل جداول اشاره‌گری را نیز  در سطرهای جدول ذخیره می‌کند که باعث می‌شود بتوان مقادیر دیگر ستون‌ها را نیز بازیابی کرد.

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

دقیقا چه چیزی در  فهرست یک پایگاه‌داده‌ها وجود دارد؟

حال شما می‌دانید که فهرست پایگاه‌داده‌ها بر یک ستون از یک جدول ساخته می شود و در این فهرست مقادیر آن ستون خاص قرار گرفته‌است. اما این موضوع نیز مهم است که درک کنیم که فهرست مذکور به هیچ وجه اطلاعاتی که در دیگر ستون‌ها در آن جدول وجود دارد را نیز در خود نگاه نمی‌دارد. برای مثال اگر ما یک فهرست از نام-کارمندان (Employee_Name) ایجاد کنیم به این معنی است که سن-کارمند (Employee_Age ) و آدرس-کارمند (Employee_Address) مه ستون‌های دیگر جدول کارمند هستند؛ در داخل فهرست پایگاه‌داده‌ها مذکور قرار ندارند.

یک اشاره‌گر نیز توسط فهرست در سطور جدول ساخته می‌شود. بنابراین سوال این است که مقداری که در جست‌وجوی آن هستیم در یک فهرست (مانند عیسی «Jesus»)  پیدا شود؛ مابقی فیلدهایی را که مرتبط با این فیلد یافت شده‌است را چگونه باید پیدا کنیم یا به آنان دست‌یابیم (فیلدهای دیگر مانند اطلاعات اطلاعات عیسی یا سن او)؟ خوب، موضوع کاملا ساده است؛ فهرست پایگاه‌های داده علاوه بر اطلاعات فیلد مورد نظر، از اشاره‌گرهایی را نیز در داخل فیلدهای مرتبط با این سطر نیز ذخیره کرده است. یک اشاره‌گر در واقع یک ارجاع است به مکانی از حافظه است که اطلاعات در دیسک ذخیره شده‌اند. پس علاوه بر مقادیر ستون که در فهرست ذخیره شده است؛ اشاره‌گری به آن سطر از جدول که آن ستون قرار دارد نیز وجد دارد که هرگاه مقداری را در فهرست یافتیم؛ به سطر مورد نظر نیز دسترسی خواهیم داشت. به عنوان نمونه در مثال مذکور و در کنار مقادیر گوناگون هر ستون مثلا کنار نام-کارمند در فهرست اشاره‌گری نیز به سطر مورد نظر قرار دارد. (“Jesus”, 0x82829) که در این مثال عبارت «0x82829» به به آن سطر و مکانی از حافظه که کارمند فوق در آن ذخیره شده است اشاره دارد. بدون این اشاره‌گرها شما فقط یک مشخصه را خواهید داشت که اگر بخواهید به مشخصات مرتبط با آن مشخصه دسترسی داشته باشی؛ با مشکل مواجه خواهید شد. مخصوصا این که اطلاعات فوق بر اساس ترتیب دیگری از جدول اصلی مرتب شده‌اند.

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

زمانی که شما کوئری زیر را اجرا کنید؛ پایگاه‌داده‌ها بررسی می‌کند که آیا برای ستون مورد نیاز فهرستی پرس‌وجو شده‌است یا خیر. با فرض اینکه برای ستون نام-کارمند (Employee_Name) دارای یک فهرست باشد؛ پایگاه‌داده‌ها بررسی خواهد کرد که آیا استفاده از فهرست برای این پرس‌وجو مناسب باشد. در صورتی که پایگاه‌داده‌ها تصمیم‌گرفت که باید از فهرست استفاده شود، آنگاه فهرست مورد استفاده قرار خواهد گرفت. به‌خاطر این که در برخی حالت ممکن است که استفاده از فهرست معنی خاصی نداشته باشد و بهتر باشد از فهرست استفاده نکرد.

آیا می‌توان پایگاه‌داده‌ها را مجبور کرد در هر پرس‌وجو از فهرست استفاده کند؟

به طور کلی، شما نمی‌توانید به پایگاه داده بگویید که در چه زمان‌هایی از فهرست استفاده کند. این تصمیمات توسط خود پایگاه‌داده‌ها اتخاذ می‌شوند. اگر چه شایان ذکر است که در بسیاری از پایگاه‌داده‌ها (مانند اوراکل و MySQL)  شما قادر خواهید بود که دقیقا مشخص کنید که پایگاه‌داده‌ها از فهرست استفاده کند.

روش ساخت فهرست توسط اس‌کیوال چگونه است؟

ساخت یک فهرست با استفاده از یک ستون؛ در زیر پرس‌وجوی «کوئری» اس‌کیوال را می‌بینید که برای ساخت یک فهرست برای ستونی با نام-کارمند (Employee_Name) در جدول کارمند است.

CREATE INDEX name_index ON Employee (Employee_Name)

ساخت یک فهرست با استفاده از چند ستون: اگر بخواهید دو یا چند ستون را در یک فهرست داشته‌باشد؛ باید پرس‌وجو «کوئری» زیر را اجرا کنید تا فهرست را اجرا نمایید. در مثال زیر ما از دو ستون استفاده کرده‌ایم؛ یکی ستون نام-کارمند (Employee_Name) و ستون دیگر سن-کارمند (Employee_Age) هستند.

CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age)

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

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

استفاده از فهرست چه مقدار هزینه دارد؟

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