GORM позволяет создавать индекс базы данных при помощи тегов index
, uniqueIndex
, эти индексы будут создаваться, при AutoMigrate или CreateTable в GORM
Тег индекса
GORM accepts lots of index settings, like class
, type
, where
, comment
, expression
, sort
, collate
, option
Следующий пример показывает, как это можно использовать
type User struct { |
uniqueIndex (уникальный индекс)
тэг uniqueIndex
работает подобно index
, аналог index:,unique
type User struct { |
Композитные индексы
Использовать одно и то же имя индекса для двух полей создаст составные индексы, например:
// create composite index `idx_member` with columns `name`, `number` |
Приоритет полей
Порядок расположения составного индекса в колонках влияет на его производительность, поэтому его необходимо тщательно выбрать
Вы можете указать порядок при помощи параметра priority
, значение приоритета по умолчанию 10
, если приоритет одинаков, то порядок будет базироваться на порядке полей структуры модели
type User struct { |
Shared composite indexes
If you are creating shared composite indexes with an embedding struct, you can’t specify the index name, as embedding the struct more than once results in the duplicated index name in db.
In this case, you can use index tag composite
, it means the id of the composite index. All fields which have the same composite id of the struct are put together to the same index, just like the original rule. But the improvement is it lets the most derived/embedding struct generates the name of index by NamingStrategy. For example:
type Foo struct { |
If the table Foo is created, the name of composite index will be idx_foo_myname
.
type Bar0 struct { |
Respectively, the name of composite index is idx_bar0_myname
and idx_bar1_myname
.
composite
only works if not specify the name of index.
Несколько индексов
A field accepts multiple index
, uniqueIndex
tags that will create multiple indexes on a field
type UserIndex struct { |