رفتن به نوشته‌ها

دسته: MongoDB (مونگو دی‌بی)

ایندکس‌های ترکیبی یا چندوجهی

اگر یادتان باشد در جلسه ی قبل کوئری زیر را داشتیم که برای فیلد gender (یک فیلد رشته ای) یک index می ساخت: db.contacts.createIndex({gender: 1}) اما با اجرای کوئری زیر متوجه دو موضوع شدیم:  اولا، این کوئری حدودا نصف کالکشن ما را برمی گرداند بنابراین داده های برگردانده شده بسیار زیاد است. دوما gender فقط دو مقدار ممکن را قبول می کند: male یا female (مذکر یا مونث). با وجود این دو نکته به این نتیجه رسیدیم که شاید تعریف index برای gender آنقدر ها کار درستی نباشد. البته اگر کسی می خواهد این کار را انجام بدهد مشکلی ندارد اما به جای عملکرد یک کوئری خاص حتما سعی کنید عملکرد کل برنامه را در نظر بگیرید چرا که index ها هزینه دارند و این هزینه باید در محلی استفاده شود که واقعا بازده مفید داشته باشد. بنابراین بحث این نیست که آیا ایجاد index برای مقادیر Boolean ضرر دارد یا نه، بلکه بحث این است که آیا index ها در مقادیر Boolean سود زیاد و قابل توجهی دارند یا خیر. بنابراین ما نمی توانیم برای gender یک index تعریف کنیم، اما اگر بخواهیم افراد بالای 40 سال و مذکر را انتخاب کنیم چطور؟ در اینجا دو متغیر داریم که یکی سن (age) و دیگری جنسیت (gender) است. اینجاست که با مبحثی به نام compound indexes یا ایندکس های ترکیبی مواجه می شویم. ایندکس های ترکیبی دقیقا مانند ایندکس های عادی هستند با این تفاوت که به جای یک فیلد، چند فیلد دارند. نکته ی مهم اینجاست که ایندکس های ترکیبی دو ایندکس جداگانه نیستند بلکه یک ایندکس هستند که دو فیلد دارد. برای ساخت یک ایندکس مرکب از سن و جنسیت می توان گفت (هنوز این کوئری را اجرا نکنید):