Menu Docs
Página inicial do Docs
/ /

Crie índices para oferecer suporte a suas queries

Um índice suporta uma query quando o índice contém todos os campos verificados pela query. A query analisa o índice, e não a collection. A criação de índices que suportam queries resulta em um grande aumento no desempenho da query.

Este documento descreve estratégias para criar índices que suportam queries.

Se você só query uma única chave em determinada coleção, então você precisa para criar apenas um índice de chave única para essa coleção. Por exemplo, você pode criar um índice em category na coleção product:

db.products.createIndex( { "category": 1 } )

Se, às vezes, você fizer query de apenas uma chave e, outras vezes, fizer query dessa chave combinada com uma segunda chave, a criação de um índice composto será mais eficiente do que a criação de um índice de chave única. O MongoDB usará o índice composto para ambas as queries. Por exemplo, você pode criar um índice em category e item.

db.products.createIndex( { "category": 1, "item": 1 } )

Isso permite ambas as opções. Você pode consultar apenas category e também pode consultar category combinado com item. Um único índice composto em vários campos pode suportar todas as consultas que pesquisam um subconjunto de "prefixo" desses campos.

Exemplo

O seguinte índice em uma coleção:

{ x: 1, y: 1, z: 1 }

Pode suportar queries que os seguintes índices são compatíveis:

{ x: 1 }
{ x: 1, y: 1 }

Existem algumas situações em que os índices de prefixo podem oferecer melhor desempenho da query: por exemplo, se z for uma array grande.

O índice { x: 1, y: 1, z: 1 } também pode suportar muitas das mesmas queries que o seguinte índice:

{ x: 1, z: 1 }

Além disso, { x: 1, z: 1 } tem um uso adicional. Dada a seguinte query:

db.collection.find( { x: 5 } ).sort( { z: 1} )

O índice { x: 1, z: 1 } oferece suporte à operação de classificação e à query, enquanto o índice { x: 1, y: 1, z: 1 } oferece suporte apenas à query. Para obter mais informações sobre classificação, consulte Usar índices para classificar os resultados da query.

Para dados hospedados no MongoDB Atlas, você pode oferecer suporte à Full Text Search com índices Atlas Search. Para saber mais, consulte Create an Atlas Search Index.

Para implantações autogerenciadas (não Atlas), o MongoDB fornece um tipo de índice text que suporta a pesquisa de conteúdo de string de caracteres em uma coleção. Para saber mais sobre índices de texto autogerenciados, consulte Índices de texto em implantações autogerenciadas.

Para usar um índice para comparações de strings, uma operação também deve especificar o mesmo agrupamento. Ou seja, um índice com ordenação não pode suportar uma operação que executa comparações de strings nos campos indexados se a operação especificar uma ordenação diferente.

Aviso

Porque os índices configurados com agrupamento usam ICU. chaves de agrupamento para obter a ordem de classificação, chaves de índice com reconhecimento de agrupamento pode ser maior do que as chaves de índice para índices sem agrupamento.

Uma coleção restaurants tem os seguintes documentos:

db.restaurants.insertMany( [
{ _id: 1, category: "café", status: "Open" },
{ _id: 2, category: "cafe", status: "open" },
{ _id: 3, category: "cafE", status: "open" }
] )

A collection restaurants tem um índice em um campo de string category com o locale de agrupamento "fr".

db.restaurants.createIndex( { category: 1 }, { collation: { locale: "fr" } } )

A consulta a seguir, que especifica o mesmo agrupamento que o índice, pode usar o índice:

db.restaurants.find( { category: "cafe" } ).collation( { locale: "fr" } )

No entanto, a seguinte operação de consulta, que por padrão usa o agrupador binário "simples", não pode usar o índice:

db.restaurants.find( { category: "cafe" } )

Para um índice composto em que as chaves de prefixo do índice não são strings, matrizes e documentos incorporados, uma operação que especifica um agrupamento diferente ainda pode usar o índice para dar suporte a comparações nas chaves de prefixo do índice.

Por exemplo, a coleta restaurants possui um índice composto nos campos numéricos score e price e no campo de string category; o índice é criado com a localidade de ordenação "fr" para comparações de strings:

db.restaurants.createIndex(
{ score: 1, price: 1, category: 1 },
{ collation: { locale: "fr" } } )

As operações a seguir, que usam agrupamento binário "simple" para comparações de strings, podem usar o índice:

db.restaurants.find( { score: 5 } ).sort( { price: 1 } )
db.restaurants.find( { score: 5, price: { $gt: Decimal128( "10" ) } } ).sort( { price: 1 } )

A operação a seguir, que usa agrupamento binário "simple" para comparações de strings no campo category indexado, pode usar o índice para preencher apenas a parte score: 5 da query:

db.restaurants.find( { score: 5, category: "cafe" } )

Para confirmar se uma query usou um índice, execute a query com a opção explain().

Importante

As correspondências com chaves de documento , incluindo chaves de documento incorporado , usam comparação binária simples. Isso significa que uma query para uma chave como "type.café" não corresponderá à chave "type.cafe", independentemente do valor definido para o parâmetro de força.

Voltar

Crie índices

Nesta página