我正在尝试将Liquibase用于我们的项目。我们主要使用Oracle数据库和其他一些数据库。我试图找出如何在索引的情况下指定列顺序。下面是典型的创建索引更改集。
<createIndex indexName="PK_xxxxxxx" tableName="xxxxx" unique="true">
<column name="column_1"/>
<column name="column_2"/>
<column name="column_3"/>
</createIndex>
在性能和应用程序可伸缩性方面,索引中的列顺序非常重要。如果在创建索引时有指定相同的方法,请指导我吗?
PS:根据列标记文档,属性afterColumn
,position
存在,它们仅适用于我假设的create table。以下是文档中所说的内容。
如果在'addColumn'命令中使用,则此属性允许您控制新列的表列顺序。只允许使用beforeColumn,afterColumn或position之一。自3.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);