# TypeORM - Indices

In general, Indexing is a process to optimize the performance of a database by optimizing the data storage. It is used to quickly locate and access the data in a database. This section explains about how to use index in TypeORM. Indices are classified into different types. Let’s go through one by one in detail.

## Column indices

We can create index for particular column using @Index. Consider an example of Customer entity as shown below and index defined for firstName column,

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

@Entity()
export class Student {

@PrimaryGeneratedColumn()
id: number;

@Index()
@Column()
firstName: string;

@Column()
lastName: string;

@Column()
age: number;

@Column()
}


@Index allow to specify name for an index as well −

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


## Unique indices

To specify Unique constraints in your column, use the below property −

{ unique: true }


For example, below is the code to specify unique index for Name column −

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


To apply indices for more than one columns, we can directly specify it after @Entity(). The sample code is as follows −

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


## Spatial indices

Spatial index allows to access spatial objects. MySQL and PostgreSQL supports spacial indices. To enable spatial indices in your column, add the following property −

{ spatial: true }


Spatial type has multiple sub types such as, geometry, point, line string, polygon etc., For example, if you want to add point spatial type in your column, use below code −

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


### Disable synchronization

To disable synchronization, use the below option on @Index decorator −

{ synchronize: false }