🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 数据库索引 GORM 允许通过 `index`、`uniqueIndex` 标签创建索引,这些索引将在使用 GORM 进行[AutoMigrate 或 Createtable ](http://v2.gorm.io/zh_CN/docs/migration.html)时创建 ## 索引标签 GORM 可以接受很多的索引设置,例如:`class`、`type`、`where`、`comment`、`expression`、`sort`、`collate` 下面的示例演示了如何使用它: ```go type User struct { Name string `gorm:"index"` Name2 string `gorm:"index:idx_name,unique"` Name3 string `gorm:"index:,sort:desc,collate:utf8,type:btree,length:10,where:name3 != 'jinzhu'"` Name4 string `gorm:"uniqueIndex"` Age int64 `gorm:"index:,class:FULLTEXT,comment:hello \\, world,where:age > 10"` Age2 int64 `gorm:"index:,expression:ABS(age)"` } ``` ### 唯一索引 ```go uniqueIndex` 标签的作用与 `index` 类似,它等效于 `index:,unique type User struct { Name1 string `gorm:"uniqueIndex"` Name2 string `gorm:"uniqueIndex:idx_name,sort:desc"` } ``` ## 复合索引 两个字段使用同一个索引名将创建复合索引,例如: ```go type User struct { Name string `gorm:"index:idx_member"` Number string `gorm:"index:idx_member"` } ``` ### 字段优先级 复合索引列的顺序会影响其性能,因此必须仔细考虑 您可以使用 `priority` 指定顺序,默认优先级值是 `10`,如果优先级值相同,则顺序取决于模型结构体字段的顺序 ```go type User struct { Name string `gorm:"index:idx_member"` Number string `gorm:"index:idx_member"` } // column order: name, number type User struct { Name string `gorm:"index:idx_member,priority:2"` Number string `gorm:"index:idx_member,priority:1"` } // column order: number, name type User struct { Name string `gorm:"index:idx_member,priority:12"` Number string `gorm:"index:idx_member"` } // column order: number, name ``` ## 多索引 一个字段接受多个 `index`、`uniqueIndex` 标签,这会在一个字段上创建多个索引 ```go type UserIndex struct { OID int64 `gorm:"index:idx_id;index:idx_oid,unique"` MemberNumber string `gorm:"index:idx_id"` } ```