GORMでは index
や uniqueIndex
タグを使用して、インデックスを作成することができます。定義されたインデックスは GORMの AutoMigrate や CreateTable 実行時に作成されます。
indexタグ
class
, type
, where
, comment
, expression
, sort
, collate
, option
など、多くのindexの設定を指定できます。
使用方法については、以下の例を参照してください。
type User struct { |
uniqueIndex
uniqueIndex
タグは index
と似た働きを持ち、 index:,unique
を指定するのと等しくなります。
type User struct { |
複合インデックス
2つのフィールドに同じインデックス名を使用すると、複合インデックスが作成されます。例:
// create composite index `idx_member` with columns `name`, `number` |
フィールドの優先度
複合インデックスを指定する際、カラムの順序がパフォーマンスに影響を与えます。そのため、順序は慎重に指定する必要があります。
priority
オプションで順序を指定できます。デフォルトの優先度の値は 10
です。 priorityの値が同じ場合、順序は構造体のフィールドの並びに基づいて設定されます。
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 { |