我有一个包含超过100K记录的表,并且此表的主键由4列组成。现在我想删除主键但保留由于主键定义而默认创建的索引,因此对于如此大的数据值应避免重新创建索引。如何删除主键约束但保持索引
我正在使用MariaDB 5.5.x版本。
我有一个包含超过100K记录的表,并且此表的主键由4列组成。现在我想删除主键但保留由于主键定义而默认创建的索引,因此对于如此大的数据值应避免重新创建索引。如何删除主键约束但保持索引
我正在使用MariaDB 5.5.x版本。
当你放弃主键时,你不能只保留简单的索引部分。
如果表是innodb,那么最好先删除主键,然后重新创建索引,因为所有secondary indexes contain the primary key也是如此。因此,如果您先创建二级索引,然后放下pk,那么mariadb也必须修改二级索引。
如果您计划创建另一个pk,则先创建该pk,然后根据相同的原因创建任何辅助索引。
在InnoDB中,更改PK(PRIMARY KEY
)始终需要重建整个表。期。
制作全部单个变化ALTER TABLE
。这里会发生什么(所以你可以看到为什么这是最好的)...
ALTER TABLE
指示的方式。RENAME
移动新表代替旧的。 (这是原子和速度。)如果您有两个ALTERs
对PK进行两次更改,您将会经历所有这些步骤两次。
每个辅助键都包含PK列的副本。所以任何改变PK 要求重建全部次要钥匙。
在InnoDB中是错误有没有PK的表。 (将提供一个隐藏的序列号,但这会使维护,复制等更加痛苦。)
如果您正在谈论除InnoDB以外的某些引擎,那么不要。你应该只使用InnoDB。 (我说的大部分内容并不适用于MyISAM。)
您可以尝试此操作 - 在删除主键之前,在键列上创建索引,然后删除主键。它可能比放弃PK和创建新索引需要更少的时间。 –