我需要修改一个表,以修改从下面提到的变更集的复合键中创建的索引的顺序。
<changeSet author="demo (generated)" id="demo-11">
<createTable tableName="customersalesdata">
<column name="id" type="BIGINT">
<constraints unique="true" primaryKey="true" primaryKeyName="customersalesdata_pkey"/>
</column>
<column name="customerid" type="NVARCHAR(255)">
<constraints primaryKey="true" unique="true" primaryKeyName="customersalesdata_pkey"/>
</column> </createTable>
</changeSet>更改的原因是索引中列的排序产生了很大的不同。因为customerid是第二列,所以不会使用它。因此,查询正在执行索引扫描。由于该表有两个以id开头的索引,按照这个顺序使用id、customerid是一种浪费(在大多数情况下)。
因此,我需要将列顺序更改为customerid和id。另一个问题是customerid,它是复合键,在另一个表中称为外键。
我的问题是,我是否需要先删除FK,然后删除复合键,然后按如下所示的顺序形成复合键
<changeSet id="2">
<addPrimaryKey columnNames="customerid, id"
constraintName="customersalesdata_pkey"
tableName="customersalesdata"
validate="true"/>
</changeSet>或者,通过组合这两个字段,在复合键的顶部创建另一个索引,如下所示
<changeSet author="demo" id="demo-id">
<createIndex tableName="customersalesdata" indexName="idxn_customer_id_id">
<column name="customer_id"/>
<column name="id"/>
</createIndex>
</changeSet>此外,在这两种情况下,是否会有任何机会失去数据?你能建议一下最好的方法吗。
发布于 2022-04-26 22:08:55
https://stackoverflow.com/questions/71313803
复制相似问题