をあなたはorg.hibernate.query.Query.html#addQueryHintを使用して、基礎となるデータベースへのクエリヒントを定義することができます。使用されているSQLダイアレクトは、クエリに定義されている各ヒントに関連する適切なテキストを挿入します。
残念ながら、org.hibernate.dialect.MySQLDialectのソースを読むと、メソッドorg.hibernate.dialect.Dialect#getQueryHintStringは拡張されず、デフォルトでは何も実行されません。
あなたは、あなたの手を汚すために喜んでいる場合、あなたはMySQLの方言の一つを拡張し、それを自分で行うことができ、インデックスについてのヒンティングデータベースクエリを実装したり、いくつかの代替MySQLの方言を探してみてくださいすることができます
public class MySqlExtendedDialect extends MySQLDialect {
public String getQueryHintString(String query, List<String> hints) {
/** define a format and read the hints, then patch the query appropriately **/
String modifiedQuery = query;
return modifiedQuery;
}
}
たとえば、クエリで「USE_INDEX_COL1_COL2」のようなヒントを定義できます。あなたの方言が "USE_INDEX_ *"ヒントを見つけたら、いくつかの基本的なSQL構文解析を行い、適切な場所に適切なテキストを挿入する必要があります。
純粋な楽しみ!
ヒントの99.9%にヒントは必要ありません。面倒なSQLと 'SHOW CREATE TABLE'を見てみましょう。 _composite_indexを追加することで、インデックスマージの交点を常に改善することができます。 (まあ、私はいつも見てきました。) –