Liquibase createIndex 列顺序

Vij*_*upa 4 liquibase

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

<createIndex indexName="PK_xxxxxxx" tableName="xxxxx" unique="true">
   <column name="column_1"/>
   <column name="column_2"/>
   <column name="column_3"/>
</createIndex>
Run Code Online (Sandbox Code Playgroud)

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

PS:根据列标签文档, attributes afterColumn,position存在,它们仅适用于我假设的创建表。以下是文档对此的说明。

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

a_h*_*ame 6

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>
Run Code Online (Sandbox Code Playgroud)

将产生以下语句(例如运行时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);
Run Code Online (Sandbox Code Playgroud)