# 數據庫索引
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"`
}
```