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 filtrar 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 están ordenadas en el índice, 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 sigan este nombrado:

  • Empiecen con UI (Unique Index) o IX (Index)

  • Guión bajo

  • El nombre de la tabla

  • El nombre del campo

Ejemplo: UI_CategoriaClave

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 sabemos que el índice es sobre el campo Clave y la clave no se repetirá.

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

Last updated