ایندکس در پایگاه داده( SQL ) چیست ؟
سیستمهای پایگاه داده به دلیل سرعت کم دیسک سخت، نمیتوانند با سرعت بالا کار جستجو و مرتبسازی اطلاعات را انجام دهند.
این مشکل به ویژه هنگامی که حجم اطلاعات بسیار زیاد است، باعث غیرقابل استفاده شدن سیستم و افزایش فشار روی سختافزار و افزایش هزینههای سختافزاری میشود.
برای رفع مشکل کندی جستجو و مرتبسازی، سیستمهای پایگاه داده مثل SQL Server و MySQL و سایر سیستمهای مدیریت پایگاه داده، با Index گذاری روی اطلاعات در SQL، کار جستجو و مرتبسازی را سرعت میدهند.
Index چیست ؟
ایندکس یک کپی جداگانه از اطلاعات است که به ترتیب دلخواه مرتب شده است. جستجو روی یک جدول مرتب شده با استفاده از روش دودویی بسیار سریعتر از پیمایش کلی اطلاعات است.
جستجوی دودویی به طور خلاصه، با اطلاع از اینکه اطلاعات مرتب شده هستند، میتواند حجم بزرگی از اطلاعات را در زمانی اندک پیمایش کند.
برای مثال اگر اطلاعات ما به شکل زیر باشد:
- A
- B
- C
- D
- E
- F
- G
برای پیدا کردن حرف E از میان اطلاعات بالا به روش دودویی، عنصر وسط یعنی D را بررسی میکنیم. چون D از E کوچکتر است، متوجه میشویم که E از ردیف اول تا چهارم قرار ندارد و به همین شکل، اطلاعات به دو نیم تقسیم میشوند تا به هدف خود برسیم.
با استفاده از جستجوی دودویی، تعداد مقایسهها به ویژه هنگامی که اطلاعات بسیار پرحجم هستند، کاهش چشمگیری پیدا میکند و در زمانی بسیار کوتاه میتوانیم مقدار مورد نظر را پیدا کنیم.
البته توجه به این نکته ضروری است که مرتب کردن اطلاعات در Index خود کاری زمانبر است و روی اطلاعاتی میتوانیم Index گذاری کنیم که حجم Insert در آنها کم و حجم جستجو در آنها زیاد است.
لزوم ایندکس گذاری به صورت دستی
همان طور که گفته شد، Index یک جدول کپی از اطلاعات است و فضای پایگاه داده را اشغال میکند. علاوه بر این، Index گذاری کاری پر هزینه است و در نتیجه نمیتوان آن را روی تمامی جدولها و تمام اطلاعات به انجام رساند.
در عوض این برنامهنویس است که میبایست تشخیص دهد، روی کدام جدول و کدام ستونها Index گذاشته شود. انتخاب دقیق و کارآمد ستونها برای ایندکس گذاری سبب میشود تا کار جستجو روی اطلاعات بسیار سریع انجام شود و در نتیجه عملکرد کلی سیستم نیز بهبود پیدا میکند.
جستجوهای انجام شده توسط JOINها
جستجوها در پایگاه داده همیشه به صورت صریح و توسط برنامهنویس به انجام نمیرسند. به عبارت دیگر، دستور WHERE تنها دستوری نیست که کار جستجو را انجام میدهد.
دستورات دیگری مثل JOINها نیز برای یافتن ردیفهای متناظر میبایست کار جستجو را انجام دهند. حتی توجه به این نکته ضروری است که JOINها به دلیل سر و کار داشتن با تعداد زیاد ردیفها، فشار بسیار زیادی به پایگاه داده وارد میکنند.
بنابراین هنگامی که از JOINها روی ستونهای مورد نظر استفاده میکنید، لازم است تا با دقت بررسی کنید که آیا ستونهای مورد مقایسه و جستجو دارای Index هستند یا خیر.