Criar um índice composto
Índices compostos são índices que contêm referências a vários campos. Os índices compostos melhoram o desempenho de queries exatamente nos campos do índice ou dos campos noprefixo do índice . A indexação de campos comumente consultados aumenta as chances de cobrir essas queries, o que significa que o MongoDB pode satisfazer a query inteiramente com o índice, sem examinar documentos.
Para criar um índice composto, utilize o método db.collection.createIndex()
:
db.<collection>.createIndex( { <field1>: <sortOrder>, <field2>: <sortOrder>, ... <fieldN>: <sortOrder> } )
Restrição
Você pode especificar até 32 campos em um único índice composto.
Antes de começar
Crie uma coleção students
que contenha estes documento:
db.students.insertMany([ { "name": "Alice", "gpa": 3.6, "location": { city: "Sacramento", state: "California" } }, { "name": "Bob", "gpa": 3.2, "location": { city: "Albany", state: "New York" } } ])
Procedimento
A seguinte operação cria um índice composto contendo os campos name
e gpa
:
db.students.createIndex( { name: 1, gpa: -1 } )
Neste exemplo:
O índice em
name
é ascendente (1
).O índice em
gpa
é decrescente (-1
).
Resultados
O índice criado suporta queries que selecionam em:
Ambos os campos
name
egpa
.Somente o campo
name
, porquename
é um prefixo do índice composto.
Por exemplo, o índice aceita estas queries:
db.students.find( { name: "Alice", gpa: 3.6 } ) db.students.find( { name: "Bob" } )
O índice não suporta queries apenas no campo gpa
, porque gpa
não faz parte do prefixo do índice. Por exemplo, o índice não oferece suporte à query a seguir:
db.students.find( { gpa: { $gt: 3.5 } } )
Saiba mais
Para saber como criar índices compostos eficientes, consulte A regra ESR (Igualdade, classificação, intervalo).
Para saber como a ordem de classificação (crescente ou decrescente) impacta o desempenho de índices compostos, consulte a página Usar índices para classificar os resultados de query.
Para saber mais sobre outros tipos de índice, consulte Tipos de índice.
Para saber quais propriedades você pode especificar para índices, consulte Propriedades do índice.