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

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

یک plan چطور رد (reject) می‌شود؟

همانطور که می دانید plan های مختلفی برای اجرای یک کوئری وجود دارد. plan به معنی «نقشه» یا «طرح» است و منظور ما از وجود plan های مختلف، وجود روش های مختلف برای اجرای کوئری ها است. مثلا اگر یک کوئری find داشته باشیم، می توانیم collection scan انجام بدهیم، می توانیم index scan انجام بدهیم و الی آخر. در این قسمت می خواهیم روی این موضوع تمرکز کنیم تا بفهمیم MongoDB چطور یک plan را قبول را رد می کند. من از کالکشن customers خودم استفاده می کنم و ابتدا تمام ایندکس های آن را بررسی می کنم: db.customers.getIndexes() این کوئری به من می گوید که دو ایندکس داریم. یکی برای id_ و دیگری برای name (در جلسه ی قبل آن را تعریف کردیم): حالا یک compound index جدید را برای این کالکشن می سازیم (هنوز اجرا نکنید): db.customers.createIndex({age: 1, name: 1}) توجه داشته باشید که در این کوئری، ترتیب مهم است. اگر name را اول قرار می دادیم، دیگر ایندکس قبلی ما (که فقط برای name بود) بی معنی می شد. چرا؟ به کد زیر توجه کنید (اجرا نکنید): db.customers.createIndex({name: 1, age: 1}) همین چند لحظه پیش به شما گفتم که ما دو ایندکس داریم که یکی از آن ها برای name بود که یک single field index است (ایندکس تکی) و از طرفی در کوئری بالا یک compound index را تعریف می کنیم که اولین فیلد آن name است. ما در جلسات قبل یاد گرفتیم که در ایندکس های ترکیبی، ایندکس ها از چپ به راست استفاده می شوند بنابراین می توانیم از مقدار آن ها به صورت مستقل استفاده کنیم و نیازی به یک ایندکس جداگانه برای name نخواهیم داشت! با این حساب کوئری زیر را اجرا کنید: