یادگرفتم یک ردیف رو به حالت ایندکس در بیاورم.
خب این جمله ی درستی نیست، ایندکس ها مبتنی بر ردیف ها نیستن، در واقع روی ستون ها ساخته میشن.
ایندکس ها (indexes) انواع مختلفی دارن:
-
index
(صرفا برای افزایش سرعت در جستجوی مقدار)
-
unique
(علاوه بر افزایش سرعت در جستجوی مقدار، یکتا بودن اون رو هم چک می کنن)
-
fulltext
(برای افزایش سرعت در جستجوی مقدارهایی از جنس متون نسبتا طولانی)
-
pk
(کلید اصلی جدول هستش که غالبا به صورت آتوماتیک مقدارش افزایش پیدا می کنه و همچنین mysql optimiszer1 برای افزایش سرعت در جستجوی مقدار ازش استفاده می کنه و همینطور یکتا بودن مقدار هم بررسی میشه در این نوع از ایندکس)
طرز کار ایندکس ها در دیتابیس:
اگه بخوام خیلی کوتاه پاسخ بدم باید بگم ایندکس ها مقادیر رو مرتب سازی می کنن. این باعث میشه سرعت پیدا کردن مقادیر طبق الگوریتم هایی که استفاده میشه به طرز قابل توجهی افزایش پیدا بکنه. شایان ذکره که در ایندکس fulltext
قبل از مرتب سازی مقادیر، ابتدا از جملات توی هر رکورد (بر مبنای فاصله) برای هر کلمه یک سطر ایجاد میشه و سپس جدول متشکل از تمام کلمات رو مرتب سازی می کنه.
نکته های مورد نیاز:
-
همانطور که گفته شد ایندکس ها سرعت جستجو (select
) رو افزایش می دن، البته روی سرعت نوشتن در دیتابیس (delete
,update
, insert
) هم تاثیر منفی دارن و یک مقدار کندتر میشه عملیات نوشتن؛ چرا که این مقدار جدیدی که قرار نوشته بشه باید توی ایندکس هایی که ساخته شده هم اعمال بشه. البته این کند شدن در نوشتن خیلی کمتر دیده میشه نسبت به اون افزایش سرعت خیلی زیادی که توی جستجوی مقدار اتفاق میوفته.
- ایندکس ها می تونن به صورت ترکیبی روی چند ستون هم ساخته بشن. به عنوان مثال برای جدول کاربران
users(username,password)
یک Composite Index2 هست که برای یک همچین کوئری خیلی موثره و باعث بهینه سازی میشه: SELECT * FROM users WHERE username = ? AND password = ?
1 بهینه ساز دیتابیس mysql که به صورت هوشمند سعی می کنه بهترین حالت استفاده از ایندکس ها رو انجام بده برای کوئری های مختلف
2 ایندکس های ترکیب شده بر متشکل از چندین ستون