GORM では、index
, uniqueIndex
タグを使ってデータベースインデックスを作成できます。これらのインデックスは、GORM で AutoMigrate または CreateTable を実行したときに作成されます。
Index タグ
GORM は、class
, type
, where
, comment
, expression
, sort
, collate
, option
のような多くのインデックス設定を受け入れます。
使い方の例を以下に示します。
type User struct { |
uniqueIndex
uniqueIndex
タグは index
と同様に機能し、index:,unique
と同じです。
type User struct { |
複合インデックス
2つのフィールドに同じインデックス名を使用すると、複合インデックスが作成されます。例:
// create composite index `idx_member` with columns `name`, `number` |
フィールドの優先度
複合インデックスの列の順序はパフォーマンスに影響を与えるため、慎重に選択する必要があります。
priority
オプションで順序を指定できます。デフォルトの優先度は 10
です。優先度が同じ場合は、モデル構造体のフィールドインデックスに基づいて順序が決定されます。
type User struct { |
共有複合インデックス
埋め込み構造体を使用して共有複合インデックスを作成する場合、構造体を複数回埋め込むと DB でインデックス名が重複するため、インデックス名を指定することはできません。
この場合、インデックスタグの composite
を使用できます。これは複合インデックスの ID を意味します。構造体で同じ複合 ID を持つすべてのフィールドは、元のルールと同様に、同じインデックスにまとめられます。しかし、改善点として、最も派生した/埋め込まれた構造体が NamingStrategy によってインデックスの名前を生成することができます。例えば
type Foo struct { |
Foo テーブルが作成された場合、複合インデックスの名前は idx_foo_myname
になります。
type Bar0 struct { |
それぞれ、複合インデックスの名前は idx_bar0_myname
と idx_bar1_myname
になります。
composite
はインデックス名を指定しない場合にのみ機能します。
複数のインデックス
1つのフィールドは、複数の index
, uniqueIndex
タグを受け入れ、フィールドに複数のインデックスを作成します。
type UserIndex struct { |