TypeORM - Índices

En general, Indexinges un proceso para optimizar el rendimiento de una base de datos optimizando el almacenamiento de datos. Se utiliza para localizar y acceder rápidamente a los datos en una base de datos. Esta sección explica cómo usar el índice en TypeORM. Los índices se clasifican en diferentes tipos. Repasemos uno por uno en detalle.

Índices de columna

Podemos crear un índice para una columna en particular usando @Index. Considere un ejemplo de entidad Cliente como se muestra a continuación y el índice definido parafirstName columna,

import {Entity, PrimaryGeneratedColumn, Column} from "typeorm"; 

@Entity() 
export class Student { 

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Index() 
   @Column() 
   firstName: string; 
   
   @Column() 
   lastName: string; 
   
   @Column() 
   age: number; 
   
   @Column() 
   address: string; 
}

@Index permitir especificar el nombre de un índice también -

@Index("Name-idx") 
@Column() 
firstName: string;

Índices únicos

Para especificar restricciones únicas en su columna, use la siguiente propiedad:

{ unique: true }

Por ejemplo, a continuación se muestra el código para especificar un índice único para la columna Nombre:

@Index({ unique: true }) 
@Column() 
firstName: string;

Para aplicar índices para más de una columna, podemos especificarlo directamente después de @Entity (). El código de muestra es el siguiente:

@Entity() 
@Index(["firstName", "lastName"]) @Index(["firstName", "lastName"], { unique: true })

Índices espaciales

El índice espacial permite acceder a objetos espaciales. MySQL y PostgreSQL admiten índices espaciales. Para habilitar índices espaciales en su columna, agregue la siguiente propiedad:

{ spatial: true }

El tipo espacial tiene múltiples subtipos, como geometría, punto, cadena de línea, polígono, etc. Por ejemplo, si desea agregar un tipo espacial de punto en su columna, use el siguiente código:

@Column("point") 
@Index({ spatial: true }) 
point: string;

Deshabilitar la sincronización

Para deshabilitar la sincronización, use la siguiente opción en @Index decorador -

{ synchronize: false }