在Hibernate 5,您可以定義查詢提示使用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來改進。 (呃,總是我見過。) –