Mongodb: использовать ключ сортировки как часть составного индекса или в своем собственном индексе?

Предположим, у вас есть следующая коллекция:

{name: 'john', occupation: 'engineer', country: 'UK', age: 20},
{name: 'allan', occupation: 'teacher', country: 'US', age: 25},
...

И вам нужно найти некоторых людей (например, всех торговцев наркотиками по имени Кевин) и отсортировать их по возрасту:

collection.find({name: 'kevin', occupation: 'drug-dealer'}).sort({age: -1})

Позже вы можете выполнить другой запрос, в котором вы найдете всех торговцев наркотиками (независимо от их имени) и отсортируете их по возрасту:

collection.find({occupation: 'drug-dealer'}).sort({age: -1})

Было бы лучше иметь отдельный индекс для «возраста» или сделать его частью нескольких составных индексов?

Часть составных индексов:

{occupation: 1, age: 1}
{name: 1, occupation: 1, age:1}

Отдельный индекс:

{occupation: 1}
{name: 1, occupation: 1}
{age: 1}

Что даст наилучшую производительность? Каковы плюсы и минусы каждого?


person Soggiorno    schedule 27.08.2019    source источник
comment
Он должен быть частью составного индекса. Отвечает ли это на ваш вопрос? stackoverflow.com/questions/36142299/   -  person kevinadi    schedule 27.08.2019


Ответы (1)


Составной индекс подойдет. Поскольку вы выполняете сортировку в своих запросах, убедитесь, что вы строите составной индекс в правильном порядке, чтобы ваш запрос мог использовать индекс не только для фильтрации документов, но и для их сортировки. В противном случае mongodb будет выполнять сортировку в памяти, которая неэффективна и ограничена 32 МБ.

person Dexter    schedule 27.08.2019