2017-09-06 4 views
0

최대 절전 모드 쿼리에서 Mysql 인덱스 힌트를 어떻게 지정할 수 있습니까?최대 절전 모드 쿼리에서 Mysql 인덱스 힌트

쿼리 플래너가 올바른 인덱스 (ref : https://www.percona.com/blog/2012/12/14/the-optimization-that-often-isnt-index-merge-intersection/)를 선택하지 않는 경우 Mysql 쿼리에서 인덱스 힌트를 사용해야합니다. 여기에 지정된

쉽게 원시 쿼리를 통해 수행 할 수 있습니다 https://dev.mysql.com/doc/refman/5.7/en/index-hints.html

+0

쿼리의 99.9 %는 힌트가 필요하지 않습니다. 문제가있는 SQL과'SHOW CREATE TABLE'을 볼 수 있습니다. _composite_index를 추가하면 색인 병합 교차 부분을 항상 향상시킬 수 있습니다. (글쎄, 나는 항상 보았다.) –

답변

0

최대 절전 모드 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 구문 분석을 수행하고 올바른 텍스트를 올바른 위치에 주입해야합니다.

순수한 재미!