2016-11-18 1 views
2

우리 프로젝트에 Liquibase를 사용하려고합니다. 우리는 주로 오라클 데이터베이스와 다른 데이터베이스를 사용하지 않습니다. 나는 인덱스의 경우 열 순서를 지정하는 방법을 알아 내려고하고있다. 다음은 전형적인 색인 작성 변경 세트입니다.Liquibase createIndex 열 순서

<createIndex indexName="PK_xxxxxxx" tableName="xxxxx" unique="true"> 
    <column name="column_1"/> 
    <column name="column_2"/> 
    <column name="column_3"/> 
</createIndex> 

성능 및 응용 프로그램의 확장 성 측면에서 인덱스의 열 순서가 중요합니다. 색인을 생성하는 동안 동일하게 지정하는 방법이 있으면 안내해 주시겠습니까?

추 신 : 열 태그 설명서에 따라 afterColumn, position 속성이 있으며이 테이블은 create table에만 적용됩니다. 여기에 대한 문서에서 말하는 것입니다.

'addColumn'명령에서 사용되는 경우이 속성을 사용하면 테이블 열 순서에서 새 열의 위치를 ​​제어 할 수 있습니다. beforeColumn, afterColumn 또는 position 중 하나만 허용됩니다. 아주 많이 DBMS가 create index 문에 지정된 순서를 사용하는 것처럼 - createIndex 태그에 나와있는 3.1

+0

. createIndex 명령을 사용 중입니다. –

+0

@PeterHenell 예, 테이블 생성 중에 'AfterColumn'또는 'Position'속성을 사용하여 열 순서가 허용됩니다. 나는 같은 'CreateIndex'와 함께 사용할 수 있는지 궁금 해서요. –

+0

@a_horse_with_no_name, 감사합니다. 일반적으로 XML은 'order less'입니다. XML 문서를 생성하는 동안 XML 조작을위한 다른 표준 도구를 사용하면 열이 순서대로 유지된다는 보장이 없습니다. 그것이이 질문의 이유입니다. –

답변

1

때문에 Liquibase는 열 순서를 사용합니다.

다음 변경 집합 :

<changeSet author="arthur" id="1"> 
    <createTable tableName="foo"> 
    <column name="col_1" type="integer"/> 
    <column name="col_2" type="integer"/> 
    <column name="col_3" type="integer"/> 
    </createTable> 
    <createIndex indexName="ix_one" tableName="foo"> 
    <column name="col_1"/> 
    <column name="col_2"/> 
    <column name="col_3"/> 
    </createIndex> 
    <createIndex indexName="ix_two" tableName="foo"> 
    <column name="col_3"/> 
    <column name="col_2"/> 
    <column name="col_1"/> 
    </createIndex> 
    <createIndex indexName="ix_three" tableName="foo"> 
    <column name="col_2"/> 
    <column name="col_3"/> 
    <column name="col_1"/> 
    </createIndex> 
</changeSet> 

다음 문을 (예를 들어, updateSQL으로 실행할 때) 생성합니다 : 당신이 인용되는 문서는 "하는 addColumn"명령을 참조한다

CREATE TABLE public.foo (col_1 INT, col_2 INT, col_3 INT); 

CREATE INDEX ix_one ON public.foo(col_1, col_2, col_3); 

CREATE INDEX ix_two ON public.foo(col_3, col_2, col_1); 

CREATE INDEX ix_three ON public.foo(col_2, col_3, col_1); 
+0

안녕하세요, 이전에 테스트 해 보았습니다. liquibase는 요소의 순서를 존중하지만 다른 XML 처리 도구는 그렇지 않습니다. 예를 들어, 저는 파이썬을 사용하여 liquibase에 입력 할 XML을 생성합니다. 표준 파이썬 XML 조작 라이브러리는 "STRICT"구문 분석을 따르지 않고 대신 사전 순으로 태그를 정렬하려고합니다. 이것은 나를위한 문제입니다. 이후 버전에서 인덱스 생성을위한 위치 같은 속성이있을 것이므로이 문제를 해결해야합니다. 도움과 설명을 해주셔서 다시 한 번 감사드립니다. –

+0

글쎄, 당신이 사용하고있는 "다른 XML 처리 도구"는 버그가 많습니다. XML ***의 요소 순서는 ***입니다. XML 스키마 (XSD)에서 _required_ 주문을 정의 할 수도 있습니다. XML과 관련이없는 경우 불가능합니다. –

+0

부분적으로 맞습니다. XSD가 그렇게 말하는 경우에만 XML 문제가 발생합니다. 그렇지 않은 경우 일반 XML의 경우 순서는 중요하지 않습니다. 그런 토론을위한 링크입니다. [does-xml-care-about-the-order-of-element] (http://stackoverflow.com/questions/4328867/does-xml-care-about-the-order-of-elements) –