Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Provedor do EF Core
/

Otimizar queries com índices

Neste guia, você pode aprender como definir índices no provedor do EF Core. Os índices podem melhorar a eficiência das queries e adicionar funcionalidades à consulta e ao armazenamento de documentos.

Sem índices, o MongoDB deve digitalizar todos os documento em uma collection para encontrar os documentos que correspondem a cada query. Essas verificações da collection são lentas e podem afetar negativamente o desempenho do seu aplicação. No entanto, se você criar um índice que cubra uma query, o MongoDB poderá usar o índice para limitar os documentos que deve inspecionar.

Para melhorar o desempenho da query, crie índices em campos que aparecem com frequência nas queries e operações do seu aplicativo que retornam resultados ordenados. Cada índice adicionado consome espaço em disco e memória quando ativo, portanto, recomendamos que você rastreie a memória do índice e o uso do disco para o planejamento da capacidade.

O provedor do EF Core suporta os seguintes tipos de índices:

  • Índices de campo único

  • Índices compostos

  • Unique indexes

Os exemplos deste guia usam o aplicação de amostra criado no guia deInício Rápido . Após configurar o aplicação de início rápido , você pode executar os exemplos neste guia adicionando o código ao método OnModelCreating() do PlanetDbContext, como mostrado no seguinte exemplo:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Paste example code here
}

Observação

O EF Core Provider cria seus índices quando você chama o método dbContext.Database.EnsureCreated(). Você não pode modificar ou excluir índices usando o provedor depois que eles são criados. Se você precisar modificar ou excluir um índice em seu aplicação, deverá usar o driver .NET/C# diretamente.

Para saber mais sobre como trabalhar com índices no driver, consulte o guia Índices na documentação do driver .NET/C#.

As seções a seguir mostram como criar cada um dos tipos anteriores de índices.

Índices de campo único são índices com uma referência a um único campo dentro dos documentos de uma coleção. Elas melhoram a consulta de campo único e o desempenho da classificação. O índice _id_ é um exemplo de um único índice de campo .

Você pode criar um único índice de campo chamando o método HasIndex() com uma expressão Lambda que especifica o campo a ser indexado. O exemplo seguinte cria um índice de campo único em uma entidade Planet:

modelBuilder.Entity<Planet>(p =>
{
p.HasIndex(p => p.orderFromSun);
p.ToCollection("planets");
});

Índices compostos são índices que cobrem vários campos dentro dos documentos de uma coleção. Esses índices melhoram a consulta de vários campos e o desempenho de classificação.

Você pode criar um índice composto chamando o método HasIndex() com uma expressão Lambda que especifica os campos a serem indexados. O exemplo seguinte cria um índice composto em uma entidade Planet:

modelBuilder.Entity<Planet>(p =>
{
p.HasIndex(p => new { p.orderFromSun, p.name });
p.ToCollection("planets");
});

Índices únicos garantem que vários documentos não contenham o mesmo valor para o campo indexado. Por padrão, o MongoDB cria um índice único no campo _id durante a criação de uma collection. Você não pode modificar ou remover este índice.

Você pode criar um índice único criando um índice usando os métodos HasIndex(), conforme mostrado nas seções anteriores, e, em seguida, encadeando o método IsUnique(). O exemplo seguinte cria um índice único em uma entidade Planet:

modelBuilder.Entity<Planet>(p =>
{
p.HasIndex(p => p.orderFromSun).IsUnique();
p.ToCollection("planets");
});

Você pode especificar opções ao criar seu índice para personalizar o nome, as propriedades ou o tipo de índice. As seções a seguir descrevem algumas das opções que você pode especificar.

Por padrão, o MongoDB cria um índice com um nome gerado com base nos campos e opções do índice. Para especificar um nome personalizado para o índice, passe o nome como uma string ao criar o índice. O exemplo seguinte cria um índice composto na entidade Planet com o nome "named_order":

modelBuilder.Entity<Planet>(p =>
{
p.HasIndex(p => new { p.orderFromSun, p.name }, "named_order");
p.ToCollection("planets");
});

Por padrão, o MongoDB cria índices em ordem crescente. Você pode chamar o método IsDescending() ao criar um novo índice para criar o índice em ordem decrescente. O exemplo seguinte cria um índice descendente em uma entidade Planet:

modelBuilder.Entity<Planet>(p =>
{
p.HasIndex(p => p.orderFromSun).IsDescending();
p.ToCollection("planets");
});

Observação

Usar um índice de campo único descendente pode impacto negativamente o desempenho do índice. Para obter o melhor desempenho, use apenas índices ascendentes.

Você pode especificar opções adicionais específicas do MongoDB ao criar um índice usando o método HasCreateIndexOptions() e passando uma instância da classe CreateIndexOptions do driver .NET/C#. Você pode passar em quaisquer opções que a classe CreateIndexOptions suporta. Para saber mais sobre as opções compatíveis, consulte a documentação da API CreateIndexOptions.

O exemplo seguinte cria um índice e especifica a opção Sparse para criar um índice esparso:

modelBuilder.Entity<Planet>(p =>
{
p.HasIndex(p => p.orderFromSun)
.HasCreateIndexOptions(new CreateIndexOptions() { Sparse = true });
p.ToCollection("planets");
});

Para obter mais informações sobre índices no MongoDB, consulte o guia Índices no manual do MongoDB Server.

Voltar

Simultaneidade otimista

Nesta página