Indexes מאפשרים לשרת ה-DB לבצע שאילתות מסויימות למציאת רשומות בצורה יעילה בלי צורך לעבור על כל האוסף.
נניח שאנחנו רוצים למצוא את כל הספרים שיש להם דירוג 10. בדרך הרגילה, MongoDB יעבור על כל האוסף, ספר אחרי ספר, כדי למצוא את הרשומות המתאימות. זה יכול להיות קצת לא יעיל, כי יכולות להיות אלפי רשומות.
Index הוא רשימת ערכים של שדה מסויים של רשומה. למשל, יכול להיות לנו Index שמבוסס על שדה rating. לכל רשומה יהיה מצביע לערך הדירוג שלה. ואז אם נרצה להביא נתונים על פי דירוג, MongoDB ילך לטבלת האינדקסים וימצא בקלות את הערך שאותו אנחנו מחפשים. מכאן יהיה אפשר לאסוף רק את הרשומות הרלוונטיות.
לא לכל שאילתא צריך ליצור Index, כי ה-Index צריך לבצע שינוי בכל פעם שיש שינוי בנתונים ויש לזה מחיר. נשתמש בזה כשיש אוסף גדול של רשומות ויש שליפות שמשתמשים בהן הרבה.
נחזור ל-shell ונבצע פעולה פשוטה של מציאת רשומות, כדי לדעת כמה זמן לקחה הפעולה נשתמש ב-executionStats.
db.books.find({rating: 8}).explain('executionStats')
בתוצאה נראה שחזרו לנו 2 רשומות ב-nReturned, נבדקו 4 רשומות ושיש לנו את זמן הריצה של השאילתא.
ניצור את האינדקס.
db.books.createIndex({ rating: 8 })
אפשר לראות את האינדקסים שקיימים באוסף על ידי:
db.books.getIndexes()
נראה את האינדקס האוטומטי שנוצר עם ID ואת האינדקס שיצרנו.
אם נריץ שוב את אותה השאיללתא ממקודם:
db.books.find({rating: 8}).explain('executionStats')
נראה בתוצאות שזמן הריצה ירד מ-23 ל-6 mili seconds.
אפשר לבטל אינדקס על ידי:
db.books.dropIndex({ rating: 8})