Liquibase createIndex列顺序

时间:2016-11-18 12:05:14

标签: liquibase

我正在尝试将Liquibase用于我们的项目。我们主要使用Oracle数据库和其他一些数据库。我试图找出如何在索引的情况下指定列顺序。下面是典型的创建索引更改集。

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

在性能和应用程序可伸缩性方面,索引中的列顺序非常重要。如果在创建索引时有指定相同的方法,请指导我吗?

PS:根据列标记文档,属性afterColumnposition存在,它们仅适用于我假设的create table。以下是文档中所说的内容。

  

如果在'addColumn'命令中使用,则此属性允许您控制新列的表列顺序。只允许使用beforeColumn,afterColumn或position之一。自3.1起

1 个答案:

答案 0 :(得分:1)

Liquibase将使用createIndex标记中列出的列顺序 - 非常类似于DBMS使用create index语句中指定的顺序。

以下变更集:

<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运行时):

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);