×

ایندکس (Index) در SQL Server

فصل هفتم :

ایندکس (Index)

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

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

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

برخی از پرکاربردترین انواع ایندکس ها عبارتند از :

  • Clustered index

    یک کلاستر ایندکس مشخص میکند رکورد های یک جدول چگونه (با چه ترتیبی) بطور فیزیکی در هارد دیسک ذخیره شوند بنابراین یک جدول تنها یک کلاستر ایندکس خواهد داشت . هنگامی که یک کلید اصلی primary key می سازیم اس کیو ال سرور بصورت اتوماتیک یک کلاستر ایندکس برای ان می سازد .

  • Nonclustered index

    این نوع ایندکس دخالتی در ترتیب ذخیره رکورد ها ندارد و تنها یک مقدار و اشاره گر (pointer) به رکوردی که حاوی ان مقدار می باشد را ذخیره میکنند . مثل انتهای بسیاری از کتاب ها لیستی از لغات مهم و صفحاتی که ان لغات در انها بکاررفته است موجود است. خود کلمه و ادرس صفحه ان.

  • Unique index

    تضمین میکند در یک جدول هیچ دو رکوردی مقدار تکراری برای این فیلد نداشته باشند. هنگامی که یک کلید اصلی می سازیم یک unique index نیز ساخته میشود .

جهت ساخت ایندکس
بروی درختواره ابجکتهای دیتابیس table مورد نظر را که می خواهیم بروی فیلد های آن ایندکس گذاری کنیم می یابیم بروی آن کلیک کرده در زیر مجموعه آن بروی فولدر indexes کلیک راست میکنیم . new index سپس بروی و Non-Clustered Index کلیک میکنیم .پنجره new index باز میشود.
در قسمت index Name می توانیم نامی را برای ایندکس انتخاب کنیم یا از نامی که خود اس کیو ال سرور برای آن انتخاب کرده است استفاده نماییم. برای انتخاب ستونهایی که می خواهیم ایندکس بروی انها بگذاریم از tab Index key Columns کلیک add را زده از پنجره باز شده فیلد های مورد نظر را تیک میزنیم . در نهایت با زدن کلید ok ایندکس ما ساخته میشود .
نکته چون در حال حاضر جدول مثال ما یک کلید اصلی دارد و خود اس کیو ال سرور بطور اتوماتیک بروی آن یک clustered index ساخته است امکان ساخت کلاستر ایندکس دیگر در جدول وجود ندارد به همین دلیل است که این ایتم در منو باز شده غیر فعال است .

کجا ایندکس بگذاریم :

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


مفاهیم و موضوعات این فصل عبارتند از :

  • تعریف ایندکس (Index)

  • معرفی انواع ایندکس (Index)

  • روش ساخت ایندکس (Index)

  • کجا ایندکس بگذاریم ؟

vatantop
نظرات و سوالات درج سوال/ نظر