تا این قسمت از این دوره ی آموزشی از index ها فقط برای find (پیدا کردن اطلاعات) استفاده کرده ایم اما باید بدانید که ایندکس ها در sorting (مرتب کردن داده ها) نیز مفید هستند. چرا؟ به دلیل اینکه ایندکس ها یک لیست ترتیبی (ordered list) هستند بنابراین MongoDB می تواند از این لیست برای مرتب کردن داده ها استفاده کند، البته به شرطی که بخواهید داده ها را دقیقا با استفاده از لیست ایندکس مرتب کنید. من برای شما یک مثال می زنم:
db.contacts.explain().find({“dob.age”: 35}).sort({gender: 1})
کوئری بالا افراد 35 ساله را گرفته و سپس آن ها را بر اساس سن و به صورت صعودی (کم به زیاد) مرتب می کند. با اجرای کوئری بالا مثل همیشه گزارش explain را می گیریم که در آن “stage” برابر “IXSCAN” است، یعنی عملیات ما از ایندکس ها استفاده کرده است و سرعت بهتری گرفته است. برای اینکه بدانیم برای کدام فیلد (gender یا age) از ایندکس استفاده شده است، باید به قسمت “indexBounds” در گزارش explain مراجعه کنیم. نکته ی مهم دیگری که باید حتما به آن توجه کنید، در مورد sort کردن داده های بدون ایندکس است. اگر داده های شما بسیار بزرگ باشد (مثلا 70 درصد کالکشن را برگردانید) و از ایندکس ها نیز استفاده نکنید، احتمال time out شدن زیاد است. time out شدن یعنی درخواست آنقدر طول می کشد که سرور یا موتور MongoDB آن را قطع می کند. چرا؟ به دلیل اینکه MongoDB فقط 32 مگابایت فضا را در مموری برای دریافت و مرتب کردن داده ها رزرو می کند بنابراین اگر index نداشته باشیم، MongoDB باید تمام اسناد شما را گرفته و در مموری قرار دهد و سپس sort را در آنجا (درون مموری) انجام بدهد. حالا اگر داده های شما بسیار زیاد باشد (میلیون ها سند)، احتمال دارد که time out کنید. بنابراین index ها فقط برای پیدا کردن داده ها نیستند، بلکه برای sort کردن در داده های بسیار بزرگ ضروری می باشند. البته پایگاه داده ی ما به طور کل 5 هزار سند دارد که برای MongoDB بسیار کوچک محسوب می شود و هیچ گاه به حد 32 مگابایت نخواهیم رسید.
