Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Optimiza queries con índices

En esta guía puedes aprender cómo definir índices en el proveedor EF Core. Los índices pueden mejorar la eficiencia de las queries y añadir funcionalidades adicionales al consultar queries y almacenar documentos.

Sin índices, MongoDB debe escanear todos los documentos de una colección para encontrar los documentos que coincidan con cada query. Estos escaneos de colección son lentos y pueden afectar negativamente el rendimiento de tu aplicación. Sin embargo, si creas un índice que cubra una query, MongoDB puede utilizar el índice para limitar los documentos que debe inspeccionar.

Para mejorar el rendimiento de las query, construir índices sobre los campos que aparecen con frecuencia en las query de tu aplicación y en las operaciones que devuelven resultados ordenados. Cada índice que agregue consume espacio en disco y memoria cuando está activo, por lo que recomendamos que rastree la memoria del índice y el uso del disco para la planificación de la capacidad.

El Proveedor de EF Core admite los siguientes tipos de índices:

  • Índices de un solo campo

  • Índices compuestos

  • Unique indexes

Los ejemplos en este guía utilizan la aplicación de muestra creada en la Guía de inicio rápido. Después de configurar la aplicación de inicio rápido, puedes ejecutar los ejemplos de esta guía agregando el código a la OnModelCreating() método de la PlanetDbContext, como se muestra en el siguiente ejemplo:

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

Nota

El proveedor de EF Core crea tus índices cuando llamas al método dbContext.Database.EnsureCreated(). No puedes modificar ni borrar índices usando el proveedor después de que se hayan creado. Si necesitas modificar o eliminar un índice en tu aplicación, debes utilizar directamente el driver .NET/C#.

Para saber más sobre cómo trabajar con índices en el driver, consulta la guía de Índices en la documentación del driver .NET/C#.

Las siguientes secciones muestran cómo crear cada uno de los tipos de índices anteriores.

Índices de campo único son índices con una referencia a un solo campo dentro de los documentos de una colección. Mejoran el rendimiento de las consultas y el ordenamiento en campos sencillos. El índice _id_ es un ejemplo de un índice de campo único.

Puedes crear un índice de un único campo llamando al método HasIndex() con una expresión lambda que especifique el campo a indexar. El siguiente ejemplo crea un índice de campo único en una entidad Planet:

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

Los índices compuestos son índices que abarcan varios campos dentro de los documentos de una colección. Estos índices mejoran el rendimiento de las query y la clasificación en múltiples campos.

Puede crear un índice compuesto llamando al método HasIndex() con una expresión lambda que especifique los campos a indexar. El siguiente ejemplo crea un índice compuesto en una entidad Planet:

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

Los índices únicos aseguran que múltiples documentos no contengan el mismo valor para el campo indexado. Por defecto, MongoDB crea un índice único en el campo _id durante la creación de una colección. No se puede modificar ni remover este índice.

Puede crear un índice único creando un índice utilizando los métodos HasIndex() como se muestra en las secciones anteriores, y luego encadenando el método IsUnique(). El siguiente ejemplo crea un índice único en una entidad Planet:

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

Puedes especificar opciones al crear tu índice para personalizar el nombre, las propiedades o el tipo de índice. Las siguientes secciones describen algunas de las opciones que puede especificar.

Por defecto, MongoDB crea un índice con un nombre generado en función de los campos y las opciones del índice. Para especificar un nombre personalizado para el índice, ingresa el nombre como una string al crear el índice. El siguiente ejemplo crea un índice compuesto en la entidad Planet con el nombre "named_order":

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

Por defecto, MongoDB crea índices en orden ascendente. Puedes llamar al método IsDescending() al crear un nuevo índice para que se cree el índice en orden descendente. El siguiente ejemplo crea un índice descendente en una entidad Planet:

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

Nota

Utilizar un índice de un solo campo descendente puede tener un impacto negativo en el rendimiento del índice. Para obtener el mejor rendimiento, utilice solo índices ascendentes.

Puedes especificar opciones adicionales específicas de MongoDB al crear un índice utilizando el método HasCreateIndexOptions() y pasando una instancia de la clase CreateIndexOptions del controlador .NET/C#. Puedes pasar cualquier opción que sea compatible con la clase CreateIndexOptions. Para obtener más información sobre las opciones admitidas, consulta la Documentación de la API CreateIndexOptions.

El siguiente ejemplo crea un índice y especifica la opción Sparse para crear un Índice disperso:

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

Para obtener más información sobre los índices en MongoDB, consulta la guía Índices en el manual de MongoDB Server.

Volver

Concurrencia optimista

En esta página