Menu Docs
Página inicial do Docs
/ / /
Driver Rust
/

Indexes

Nesta página

  • Visão geral
  • Cobertura e desempenho da query
  • Considerações operacionais
  • Tipos de índice
  • Índices de campo único
  • Índices compostos
  • Índices de várias teclas (índices de campo de array)
  • Índices aglomerados
  • Text Indexes
  • Índices geoespaciais
  • Unique Indexes
  • Remover um Índice
  • Informações adicionais
  • Documentação da API

Neste guia, você pode aprender como usar o driver Rust para criar e gerenciar índices. Os índices são estruturas de dados especiais que melhoram o desempenho das consultas no MongoDB.

Se você realizar uma consulta em uma coleção sem nenhum índice, o MongoDB examinará todos os documentos para encontrar correspondências. Essas verificações da coleção são lentas e podem afetar negativamente o desempenho do seu aplicativo. Quando você cria um índice que abrange sua consulta, o MongoDB limita o número de documentos que inspeciona para encontrar correspondências, o que resulta em melhor desempenho.

Dica

Você pode usar índices em operações de atualização, excluir operações e alguns estágios do pipeline de agregação. Para saber mais sobre o uso de índices em agregações, consulte Melhorar o desempenho com índices e filtros de documentos no manual do servidor MongoDB.

A tabela a seguir descreve os elementos que você pode incluir em uma query do MongoDB:

Elemento
Descrição
Query
Required
Specifies the fields and values to match
Opções
Optional
Specify how the query executes
Projeção
Optional
Specifies the fields that MongoDB returns in matched documents
Sort
Optional
Specifies the order of documents returned

Quando seus elementos de query fazem referência a campos que estão todos incluídos no mesmo índice, o MongoDB pode retornar resultados diretamente do índice. Essas queries são chamadas de queries cobertas.

Para saber como garantir que seu índice cubra sua query, consulte Query coberta no manual do servidor.

Importante

Critérios de classificação

Seus critérios de classificação devem corresponder ou inverter a ordem do índice.

Suponha que uma collection tenha o seguinte índice no campo name em ordem crescente (AZ) e no campo age em ordem decrescente (9-0):

name_1_age_-1

O MongoDB usa esse índice quando você classifica documentos em uma das seguintes configurações:

  • name ascendente, descendente age

  • name descendente, ascendente age

Se você especificar a mesma ordem de classificação para ambos os campos, o MongoDB não utilizará o índice e, em vez disso, executará uma classificação na memória.

Para melhorar o desempenho de sua query, crie índices em campos que aparecem com frequência em suas queries. No entanto, é uma boa prática acompanhar a memória do índice e o uso do disco para o planejamento da capacidade, pois cada índice consome espaço em disco e memória. Além disso, se uma operação de gravação atualizar um campo indexado, o MongoDB também deverá atualizar o índice relevante.

O MongoDB oferece suporte a esquemas dinâmicos, para que seu aplicativo possa consultar em campos com nomes desconhecidos ou de variáveis. Se você estiver conectado à versão 4.2 ou posterior do MongoDB Server , poderá criar índices curinga para dar suporte a essas queries. Para saber mais sobre esse tipo de índice, consulte Índices curinga no manual do servidor MongoDB.

O MongoDB suporta vários tipos de índice para dar suporte às suas query. As seções a seguir descrevem os tipos de índice comuns e mostram como criar cada tipo de índice em uma coleção.

Observação

collection de amostras

Os exemplos neste guia utilizam collections dos dados de amostra do Atlas. Para saber como importar esses dados, consulte o tutorial Carregar dados de amostra na documentação do Atlas.

Você pode utilizar os métodos create_index() e create_indexes() para criar índices em uma collection. O método create_index() usa um parâmetro de estrutura IndexModel que você pode construir usando o método builder() do tipo.

Para ver uma lista completa dos tipos de índice, consulte Tipos de índice no manual do servidor MongoDB.

Um único índice de campo mantém uma referência a um campo do documento.

Este índice melhora o desempenho de consultas e classificações de campo único. Ele também suporta índices TTL que removem automaticamente documentos de uma coleção após um determinado período de tempo. Para saber mais sobre os índices TTL, consulte Índices TTL no manual do servidor.

Quando você cria uma nova coleção, o MongoDB cria automaticamente um índice de campo único e exclusivo no campo _id .

O seguinte código cria um índice ascendente no campo city na collection sample_training.zips :

let index = IndexModel::builder().keys(doc! { "city": 1 }).build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
city_1

Um índice composto mantém uma referência a vários campos do documento.

Este índice melhora o desempenho de query e classificações em vários campo. Ao criar um índice composto, você deve especificar uma direção para cada um dos campos indexados.

Você pode criar um índice de múltiplas chaves utilizando a mesma sintaxe para criar um índice de campo único.

O seguinte código cria um índice composto nos campos city e pop na collection sample_training.zips :

let index = IndexModel::builder()
.keys(doc! { "city": 1, "pop": -1 })
.build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
city_1_pop_-1

Um índice de múltiplas chaves mantém uma referência a um campo com valor de array. Este índice melhora o desempenho das query nos campo da matriz.

Você pode criar um índice de múltiplas chaves utilizando a mesma sintaxe para criar um índice de campo único.

O seguinte código cria um índice de múltiplas chaves no campo tags na collection sample_training.posts :

let index = IndexModel::builder().keys(doc! { "tags": 1 }).build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
tags_1

Os índices clusterizados melhoram o desempenho das operações de inserção, atualização e exclusão em coleções clusterizadas. Coleções clusterizadas armazenam documentos ordenados pelo valor da chave do índice agrupado. Para saber mais sobre essas coleções, consulte Coleções clusterizadas no manual do Servidor.

Você pode criar um índice agrupado somente ao criar uma collection. Para criar uma collection clusterizada, execute as seguintes etapas:

  1. Crie uma instância ClusteredIndex .

  2. Chame o método create_collection() .

  3. Encadeie o método clustered_index() ao método create_collection() , passando sua instância ClusteredIndex como parâmetro de clustered_index().

Você deve definir os seguintes campos da estrutura ClusteredIndex :

  • O campo key , que especifica o padrão de chave. O valor deste campo deve ser { _id: 1 }.

  • O campo unique , que especifica a singularidade do índice. O valor deste campo deve ser true.

Para criar uma instância do ClusteredIndex que utiliza automaticamente os valores exigidos, você pode chamar o método default() do tipo.

O código a seguir cria um índice clusterizado com a configuração padrão no campo _id ao criar uma nova collection chamada items no reconhecimento de data center sample_training :

let db = client.database("sample_training");
let cl_idx = ClusteredIndex::default();
db.create_collection("items")
.clustered_index(cl_idx)
.await?;

Um índice de texto oferece suporte a query de pesquisa no conteúdo da string. Esse índice faz referência a um campo com um valor de string ou um valor de array de string. O MongoDB suporta pesquisa de texto para vários idiomas. Ao criar um índice de texto, você pode especificar o idioma padrão como uma opção.

Uma collection só pode conter um índice de texto. Para criar um índice de texto em múltiplos campos de texto, você pode criar um índice composto. Quando você executa uma Atlas Search de texto após criar um índice composto, a operação Atlas Search é executada em todos os campos de texto no índice composto.

Dica

Atlas Full Text Search do Atlas

Os índices de texto são diferentes dos índices do Atlas Full Text Search . Para saber mais sobre os índices do Atlas Search , consulte o guia Índices do Atlas Search .

O seguinte código cria um índice de texto no campo body na collection sample_training.posts . O código define uma opção para especificar "spanish" como o idioma padrão para o índice de texto:

let idx_opts = IndexOptions::builder()
.default_language("spanish".to_string())
.build();
let index = IndexModel::builder()
.keys(doc! { "body": "text" })
.options(idx_opts)
.build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
body_"text"

O MongoDB suporta query contendo de dados de coordenadas geoespaciais usando índices 2dsphere . Você pode criar um índice 2dsphere em um campo com valores de objeto GeoJSON.

Esse tipo de índice suporta as seguintes tarefas:

  • Query em dados geoespaciais para encontrar inclusão, interseção e proximidade

  • Cálculo de distâncias em um plano euclidiano

Importante

Você não pode criar dois índices geoespaciais no mesmo campo.

O seguinte documento de amostra na collection sample_mflix.theaters contém o campo location.geo. Este campo tem um valor de ponto GeoJSON:

{
"_id": ...,
"theaterId": ...,
"location": {
"address": ...,
"geo": {
"type": "Point",
"coordinates": [
-93.24565,
44.85466
]
}
}
}

O seguinte código cria um índice geoespacial 2dsphere no campo location.geo na collection sample_mflix.theaters :

let index = IndexModel::builder()
.keys(doc! { "location.geo": "2dsphere" })
.build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
location.geo_"2dsphere"

Um índice único garante que os campos indexados não armazenem valores duplicados. Por padrão, o MongoDB cria um índice de campo único exclusivo no campo _id quando você cria uma collection.

Para criar um índice exclusivo, especifique o campo ou a combinação de campos para os quais você deseja manter a exclusividade e defina a opção unique como true.

O código a seguir mostra como definir o campo unique como true em uma instância IndexOptions e passar essas opções ao criar um IndexModel:

let opts = IndexOptions::builder().unique(true).build();
let index = IndexModel::builder()
.keys(doc! { "_id": -1 })
.options(opts)
.build();

Você pode remover ou descartar qualquer índice de uma collection, exceto o índice único padrão no campo _id . Para remover um índice, passe o nome do índice para o método drop_index() .

Dica

Remover todos os índices

Você pode remover todos os índices em uma collection, exceto o índice _id de uma só vez usando o método drop_indexes() .

O exemplo a seguir remove um índice chamado city_1 da collection sample_training.zips :

my_coll.drop_index("city_1".to_string()).await?;

Para saber mais sobre como projetar modelos de dados e criar índices apropriados para seu aplicativo, consulte Estratégias de indexação e Fatores operacionais e modelos de dados no manual do servidor MongoDB.

Para saber sobre como realizar operações de leitura, consulte os guias na categoria Operações de leitura .

Para saber mais sobre os conceitos mencionados neste guia, consulte a seguinte documentação do servidor:

Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo:

Voltar

Agregação