通常のindexは以下の通りindex = true
って書いておけば簡単に作れる。
宣言(カラム部分のみ)
@Column(name = "score", index = true)
public int score;
生成されるクエリ(一部)
CREATE INDEX index_XXX_score on XXX(score);
これを複合indexにする場合、組み合わせたいカラム同士で同じ名前をindexGroupsに追加することで複合indexが構築される。
宣言(カラム部分のみ)
@Column(name = "category_id", indexGroups = {"category_score"})
public int categoryId;
@Column(name = "score", indexGroups = {"category_score"})
public int score;
生成されるクエリ(一部)
CREATE INDEX index_XXX_category_score on XXX(category_id, score);
Groups、という名前からお察しの通り、あるカラムを複数のindexに絡めることも可能。例えば、A-BとB-Cの二つの複合indexを使うとか。
例えばこうやってcategoryとscoreで複合indexを設定しておけば、きっと「category = 1をscoreで昇順」みたいなリクエストが爆速になってくれるはず。id取得ばかりがクエリじゃない。ORMはSQLを理解してこそ真の力を発揮できるはず。