我正在尝试将 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
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)
| 归档时间: |
|
| 查看次数: |
10110 次 |
| 最近记录: |