ç´¢å¼
ååç´¢å¼â
ä½ å¯ä»¥å¨è¦å建索å¼çåä¸ä½¿ç¨@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 ä¸çåä¸å建空é´ç´¢å¼ï¼è¯·å¨ä½¿ç¨ç©ºé´ç±»åçåï¼geometryï¼pointï¼linestringï¼polygonï¼multipointï¼multilinestringï¼multipolygonï¼geometrycollectionï¼ä¸æ·»å indexï¼å
¶ä¸spatialï¼trueï¼ï¼
@Entity()
export class Thing {
@Column("point")
@Index({ spatial: true })
point: string;
}
è¦å¨ PostgreSQL ä¸çåä¸å建空é´ç´¢å¼ï¼è¯·å¨ä½¿ç¨ç©ºé´ç±»åï¼geometryï¼geographyï¼çå䏿·»å 带æspatialï¼trueçIndexï¼
@Entity()
export class Thing {
@Column("geometry", {
spatialFeatureType: "Point",
srid: 4326
})
@Index({ spatial: true })
point: Geometry;
}
ç¦ç¨åæ¥â
TypeORM 䏿¯ææäºç´¢å¼é项åå®ä¹ï¼ä¾å¦lowerï¼pg_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;
}