TypeORM - indeksy

Ogólnie, Indexingto proces optymalizacji wydajności bazy danych poprzez optymalizację przechowywania danych. Służy do szybkiego lokalizowania i uzyskiwania dostępu do danych w bazie danych. W tej sekcji wyjaśniono, jak używać indeksu w TypeORM. Indeksy są podzielone na różne typy. Przeanalizujmy szczegółowo jeden po drugim.

Indeksy kolumnowe

Możemy stworzyć indeks dla konkretnej kolumny używając @Index. Rozważmy przykład encji Customer , jak pokazano poniżej, i indeksu zdefiniowanego dlafirstName kolumna,

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 pozwalają określić również nazwę indeksu -

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

Unikalne indeksy

Aby określić Unikalne ograniczenia w kolumnie, użyj poniższej właściwości -

{ unique: true }

Na przykład poniżej znajduje się kod określający unikalny indeks dla kolumny Nazwa -

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

Aby zastosować indeksy dla więcej niż jednej kolumny, możemy określić to bezpośrednio po @Entity (). Przykładowy kod jest następujący -

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

Indeksy przestrzenne

Indeks przestrzenny umożliwia dostęp do obiektów przestrzennych. MySQL i PostgreSQL obsługują indeksy przestrzenne. Aby włączyć indeksy przestrzenne w kolumnie, dodaj następującą właściwość -

{ spatial: true }

Typ przestrzenny ma wiele podtypów, takich jak geometria, punkt, ciąg linii, wielokąt itp. Na przykład, jeśli chcesz dodać punktowy typ przestrzenny w swojej kolumnie, użyj poniższego kodu -

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

Wyłącz synchronizację

Aby wyłączyć synchronizację, użyj poniższej opcji na @Index dekorator -

{ synchronize: false }