다중 열 인덱스를 성배합니다
문제
누군가가 성배에서 멀티 칼럼 인덱스를 정의하는 방법을 설명 할 수 있습니까? 문서는 가장 희박합니다.
예를 들어 이것은 전혀 작동하지 않는 것 같습니다.http://grails.org/gorm+index+definitions
나는 이것으로 운이 좋았지 만 결과는 기껏해야 무작위로 보인다. 한 도메인 클래스에서 작동하는 정의는 다른 이름에 적용될 때 (물론 다른 이름으로).http://www.grails.org/doc/1.1/guide/single.html#5.5.2.6%20Database%20Indices
일부 작업 예와 설명은 크게 높이 평가 될 것입니다!
해결책
멀티 컬럼 인덱스에 대해 저에게 적합한 솔루션은 다음과 같습니다.
class ClassName {
String name
String description
String state
static mapping = {
name index: 'name_idx'
description index: 'name_idx'
state index: 'name_idx'
}
}
이렇게하면 인덱스의 세 열이있는 'name_idx'라는 색인이 생성됩니다.
단점 : 열은 입력 한 순서가 아니라 알파벳 순서로 인덱스에 나열되어 있습니다.
다른 팁
인덱스 멀티 컬럼을 만들려면 쉼표 분리기가있는 열을 나열하십시오 (쉼표 이후 공간이 없음, 피하십시오. 이 버그. 두 번째 URL은 다음과 같이 지적합니다.
index:'Name_Idx, Address_Index'
공간과 함께; 작동해야합니다
index:'Name_Idx,Address_Index'
당신이 지적한 첫 번째 URL은 제안 된 변화였습니다 (나는 그것이 현재 구현되었다고 생각하지 않으며 그것이 얼마나 될 것인지 전혀 모른다).
afaik, the index
폐쇄 여기 구현되지 않았으므로 이러한 예제는 무시되어야합니다 (이 페이지는 실제 구현을 문서화하지 않고 가능한 구현을 논의하기위한 것입니다).
단일 열 색인을 정의하는 올바른 방법 name_idx
a name
속성은
static mapping = {
name index:'name_idx'
}
죄송하지만 다중 열 색인을 정의하는 방법을 모르겠습니다. 메일 링리스트를 성배합니다 여기서 답을 얻지 못한다면. 도메인 클래스에서 멀티 컬럼 인덱스를 직접 선언 할 수없는 가능성이없는 이벤트에서는 SQL 파일로 정의 할 수 있습니다. 이 SQL 파일은 init
폐쇄 Bootstrap.groovy
나는 멀티 컬럼 인덱스에서 열의 순서를 제어 할 수 있어야하고 독특하게 만들 수 있어야했습니다. Direct SQL을 사용하여 부트 스트랩에서 인덱스를 작성하여 Gorm / Hibernate 한계를 둘러었습니다.
class BootStrap {
DataSource dataSource
def init = { servletContext ->
if (!MyModel.count()) { // new database
createIndexes()
...
}
}
private void createIndexes() {
Sql sql = new Sql(dataSource)
sql.execute("create unique index my_index on my_model(col1,col2);")
}