4.6 Agregando índices

Puedes agregar índices a tus tablas utilizando Fluent Api el cual te permite también agregar llaves foráneas.

Se recomienda utilizar índices en aquellos campos que necesites parar tus reportes, por ejemplo para un reporte de ventas por fechas, deberías crear un indice en el campo fecha para que la consulta se ejecute mas rápido ya que el índice al igual que el de un libro mantiene una lista de las ventas ordenadas por fecha, así solo busca las fechas que estan ordernadas en el índice y no recorre toda la tabla, de lo contrario si tu tabla de ventas tiene 100,000 registros y no tiene índice busca uno por uno en los 100,000 registros y si tiene un índice busca solamente a partir del rango de fechas que deseas consultar.

También puedes crear índices únicos como llaves alternas para que la base de datos revise automáticamente que por ejemplo 2 categorías no pueden tener la misma clave en la misma empresa.

Recomiendo que los índices únicos empiecen con UI (Unique Index) seguido del nombre de la tabla y el nombre del campo si es que el índice es de un único campo y que comiencen con IX (Index) si es un índice que no es único.

Vamos a agregar un índice único a la tabla categoría en el campo Clave y otro en el campo Nombre.

Para mantener más organizada los archivos sugiero crear los índices de tu tabla en una carpeta con el nombre de Entity Configurations.

  1. Dentro de la carpeta Model crea una nueva carpeta llamada Entity Configurations (Clic derecho del mouse sobre la carpeta Model -> Agregar -> Nueva carpeta)

  2. Crea una nueva clase llamada CategoriaConfiguration.cs (Clic derecho del mouse sobre la carpeta Entity Configurations -> Agregar -> Clase ...)

  3. Haz que la clase implemente la interfaz : IEntityTypeConfiguration<Categoria> presiona Ctrl + . sobre la palabra IEntityTypeConfiguration para agregar automáticamente los imports y otra vez para implementar los métodos de la interfaz

CategoriaConfiguration.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
namespace CaducaRest.Models.Entity_Configurations
{
public class CategoriaConfiguration
: IEntityTypeConfiguration<Categoria>
{
public void Configure(EntityTypeBuilder<Categoria> builder)
{
throw new NotImplementedException();
}
}
}

4. Escribe el siguiente código para crear el índice llamado UI_CategoriaClave,

CategoriaConfiguration.cs
public void Configure(EntityTypeBuilder<Categoria> builder)
{
builder.HasIndex(e => e.Clave )
.HasName("UI_CategoriaClave")
.IsUnique();
}

De esta forma le indicamos que la tabla categoría tiene un índice llamado UI_CategoriaClave, que el índice es sobre el campo Clave que es único.

5. En el archivo CaducaContext.cs agrega el método OnModelCreating para agregar el archivo de configuración

CaducaContext.cs
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new CategoriaConfiguration());
}

6. Agrega una nueva migración en la Consola del Administrador de Paquetes

Add-Migration IndicesCategoria

Se crea en la carpeta Migrations un archivo con el código necesario para crear los índices

7. Actualiza la base de datos desde la Consola del Administrador de Paquetes

Update-database

Los índices se han creado correctamente