2011-11-22 61 views
5

当使用命令:为什么MySQL使用临时表来删除主键?

ALTER TABLE my_table DROP PRIMARY KEY; 

状态(当SHOW PROCESSLIST)显示为:

copy to tmp table 

为什么它会需要使用TMP表 “放下” 主键约束?

+0

“实现细节”;-)我会怀疑潜在的数据集群变化 - 例如,它移动到一个“堆”或以其他方式重新聚集在特定的引擎中? (InnoDB?MyISAM?)由于它是DDL操作 - 而不是常见的 - “最简单的方式”通常是“最好的方式”,特别是如果它可以重用经过良好测试/验证的代码路径。 – 2011-11-22 02:34:00

回答

5

考虑复合主键的情况。在这种情况下,数据库引擎必须从合成密钥创建新的聚簇索引,这需要移动行。 (请记住,行通过主键在磁盘上进行物理排序。)鉴于这种情况的罕见性,处理主键已经是整数的特殊情况并不值得。