ایندکس گذاری در MongoDB
ایندکسها تاثیر بسیاری در اجرای کوئریها دارند. بدون ایندکسها، MongoDB باید تمام سندهای یک مجموعه را برای انتخاب سندهایی که با عبارت کوئری مطابقت دارند، اسکن کند. این اسکن بسیار ناکارآمد است و در این حالت mongoDB به پردازش حجم بزرگی از دادهها نیاز دارد.
ایندکسها ساختارهای دادهی مخصوصی هستند که بخش کوچکی از مجموعه دادهها را به شکل سادهای برای پیمایش، ذخیره میکنند. ایندکس، مقدار فیلد یا فیلدهای خاصی را که بعنوان ایندکس تعیین شدهاند، ذخیره میکند.
متد ()ensureIndex
برای ساخت یک ایندکس باید از متد ()ensureIndex در MongoDB استفاده کنید.
گرامر
گرامر پایه متد ()ensureIndex به شکل زیر است:
>db.COLLECTION_NAME.ensureIndex({KEY:1})
در اینجا، key نام فیلدی است که میخواهید بر روی آن ایندکس بسازید و مقدار 1 برای مرتب سازی بصورت صعودی است. برای ساخت ایندکسهایی با مرتب سازی نزولی باید از مقدار 1- استفاده کنید.
مثال
>db.mycol.ensureIndex({"title":1})
در متد ()ensureIndex برای ساخت ایندکس بر روی چندین فیلد، میتوانید چندین فیلد را به آن پاس دهید:
>db.mycol.ensureIndex({"title":1,"description":-1})
متد ()ensureIndex همچنین یک لیست از اختیارات را قبول میکند که در ادامه آمدهاند:
پارامتر | نوع داده | توضیحات |
background | Boolean | ایندکس را در پس زمینه میسازد؛ بنابراین عمل ساخت ایندکس، بقیه فعالیتهای پایگاه داده را مسدود یا متوقف نمیکند. برای این کار مقدار را true تعیین کنید. مقدار پیش فرض false است. |
unique | Boolean | یک ایندکس یکتا را میسازد. در این حالت مجموعه، اجازه درج سندهایی را که مقدار کلید یا کلیدهای آنها از قبل وجود دارند، نخواهد داد. برای ساخت یک ایندکس یکتا مقدار را true تعیین کنید. مقدار پیش فرض آن false است. |
name | string | نام ایندکس. اگر تعیین نشود MongoDB نام خودکاری را توسط الحاق نام فیلدها و ترتیب مرتب سازی تولید میکند. |
dropDups | Boolean | ایندکسی را بر روی فایل میسازد که ممکن است مقادیر تکراری داشته باشد. MongoDB فقط اولین پیشامد از یک کلید را ایندکس میکند و همه سندهایی را که پیشامد ثانویه کلید هستند، از مجموعه حذف میکند. برای ساخت ایندکس یکتا مقدار را true تعیین کنید. مقدار پیش فرض آن false است. |
sparse | Boolean | اگر مقدار آن true تعیین شود، ایندکس فقط به سندهایی با فیلد تعیین شده رجوع میکند. این ایندکسها از فضای کمی استفاده کرده و در برخی موقعیتها متفاوت رفتار میکنند. مقدار پیش فرض آن false است. |
expireAfterSeconds | integer | تعیین یک مقدار به ثانیه بعنوان TTL، برای کنترل کردن اینکه چه مدت MongoDB اسناد را در این مجموعه نگه دارد. |
v | index version | شمارهی نسخه ایندکس. نسخهی ایندکس پیش فرض بستگی به نسخه mongod درحال اجرای هنگام ساخت ایندکس دارد. |
weights | document | وزن یک عدد بین 1 تا 99999 است و مشخص کنندهی اهمیت فیلد با دیگر فیلدهای ایندکس شده از نظر امتیاز است. |
default_language | string | برای یک ایندکس متنی، زبانی برای تعیین کردن لیست کلمات متوقف کننده و نقش هایی برای ریشهیابی و نشانه گذاری کلمات. |
language_override | string | برای یک ایندکس متنی، تعیین کننده نام فیلد در سند که شامل زبانی برای لغو کردن زبان پیش فرض است. مقدار پیش فرض آن language است. |