최대 절전 모드 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를 추가하면 색인 병합 교차 부분을 항상 향상시킬 수 있습니다. (글쎄, 나는 항상 보았다.) –