TypeORM - Índices

Em geral, Indexingé um processo para otimizar o desempenho de um banco de dados, otimizando o armazenamento de dados. Ele é usado para localizar e acessar rapidamente os dados em um banco de dados. Esta seção explica como usar o índice no TypeORM. Os índices são classificados em diferentes tipos. Vamos examinar um por um em detalhes.

Índices de coluna

Podemos criar um índice para uma coluna particular usando @Index. Considere um exemplo de entidade Cliente conforme mostrado abaixo e índice definido parafirstName coluna,

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 permite especificar o nome de um índice também -

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

Índices únicos

Para especificar restrições exclusivas em sua coluna, use a propriedade abaixo -

{ unique: true }

Por exemplo, abaixo está o código para especificar um índice exclusivo para a coluna Nome -

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

Para aplicar índices para mais de uma coluna, podemos especificá-lo diretamente após @Entity (). O código de amostra é o seguinte -

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

Índices espaciais

O índice espacial permite acessar objetos espaciais. MySQL e PostgreSQL suportam índices espaciais. Para habilitar índices espaciais em sua coluna, adicione a seguinte propriedade -

{ spatial: true }

O tipo espacial tem vários subtipos, como geometria, ponto, string de linha, polígono, etc., por exemplo, se você deseja adicionar o tipo espacial de ponto em sua coluna, use o código abaixo -

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

Desativar sincronização

Para desativar a sincronização, use a opção abaixo em @Index decorador -

{ synchronize: false }