JSRUN 用代码说话

索引

编辑教程

索引

单列索引

你可以在要创建索引的列上使用@Index为特定列创建数据库索引。 也可以为实体的任何列创建索引。 例如:

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

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

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

  @Column()
  @Index()
  lastName: string;
}

还可以指定索引名称:

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

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

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

  @Column()
  @Index("name2-idx")
  lastName: string;
}

唯一索引

要创建唯一索引,需要在索引选项中指定{unique:true}

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

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

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

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

联合索引

要创建具有多个列的索引,需要将@Index放在实体本身上,并指定应包含在索引中的所有列属性名称。 例如:

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

@Entity()
@Index(["firstName", "lastName"])
@Index(["firstName", "middleName", "lastName"], { unique: true })
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstName: string;

  @Column()
  middleName: string;

  @Column()
  lastName: string;
}

空间索引

MySQL 和 PostgreSQL(当 PostGIS 可用时)都支持空间索引。

要在 MySQL 中的列上创建空间索引,请在使用空间类型的列(geometrypointlinestringpolygonmultipointmultilinestringmultipolygongeometrycollection)上添加index,其中spatial:true):

@Entity()
export class Thing {
  @Column("point")
  @Index({ spatial: true })
  point: string;
}

要在 PostgreSQL 中的列上创建空间索引,请在使用空间类型(geometrygeography)的列上添加带有spatial:trueIndex

@Entity()
export class Thing {
  @Column("geometry", {
    spatialFeatureType: "Point",
    srid: 4326
  })
  @Index({ spatial: true })
  point: Geometry;
}

禁用同步

TypeORM 不支持某些索引选项和定义(例如lowerpg_trgm),因为它们具有许多不同的数据库细节以及获取有关现有数据库索引的信息并自动同步的多个问题。 在这种情况下,你应该使用所需的任何索引签名手动创建索引(例如在迁移中)。 要使 TypeORM 在同步期间忽略这些索引,请在@Index装饰器上使用synchronize:false选项。

例如,使用不区分大小写的比较创建索引:

CREATE INDEX "POST_NAME_INDEX" ON "post" (lower("name"))

之后,应该禁用此索引的同步,以避免在下一个架构同步时删除:

@Entity()
@Index("POST_NAME_INDEX", { synchronize: false })
export class Post {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;
}
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟