Редът на полетата в индекса има значение; най-добрият съставен индекс за вашия пример за намиране и сортиране всъщност би бил:
db.test.ensure_index([("xxx",1),("_id",-1)])
Тъй като критериите ви за търсене са в полето „xxx“, поставянето на това поле първо в индекса ще намери повече резултати, отколкото търсенето по _id
и след това филтриране до документи, съответстващи на вашия xxx
критерии.
Ако погледнете n
номер за всеки план, разглеждан от оптимизатора на заявки в allPlans
, BtreeCursor xxx_1
index всъщност връща най-много резултати (34). Другите индекси връщат 9, 10 и 16 резултата .. така че биха били по-малко ефективни за дадените критерии за търсене.
За повече информация относно оптимизирането на индекса тази статия е много полезна:Оптимизиране на MongoDB съставни индекси .