我有一个包含超过100K记录的表,该表的主键包含4列。现在我想删除主键但是由于主键定义而保留默认创建的索引,因此应该避免为这么大的数据值重新创建索引。
我正在使用MariaDB 5.5.x版本。
答案 0 :(得分:1)
当你删除主键时,你不能只保留简单的索引部分。
如果表是innodb,那么最好先删除主键,然后重新创建索引,因为所有secondary indexes contain the primary key也是如此。因此,如果先创建二级索引然后删除pk,那么mariadb也必须修改二级索引。
如果您打算创建另一个pk,那么先创建它,然后出于同样的原因创建任何二级索引。
答案 1 :(得分:1)
在InnoDB中,更改PK(PRIMARY KEY
)总是需要重建整个表。周期。
在单个ALTER TABLE
中进行所有更改。这是将要发生的事情(所以你可以看到为什么这是最好的)......
ALTER TABLE
指示的方式更改所有中的新表格。RENAME
移动新表取代旧表。 (这是原子的,快速的。)如果您有两个ALTERs
来对PK进行两次更改,那么您将会经历两次所有这些步骤。
每个辅助密钥都包含PK列的副本。因此,对PK 的任何更改都需要重建所有辅助密钥。
在InnoDB中有一个没有PK的表是错误的。 (将提供隐藏的序列号,但这会使维护,复制等更加痛苦。)
如果你正在谈论InnoDB以外的一些引擎,那么,不要。你应该只使用InnoDB。 (我所说的大部分内容都不适用于MyISAM。)