2011-11-22 4 views
5

コマンドを使用して:MySQLが一時テーブルを使用して主キーを削除するのはなぜですか?

ALTER TABLE my_table DROP PRIMARY KEY; 

状態(SHOWのPROCESSLISTのとき)のように表示されます。

copy to tmp table 

なぜそれが主キー制約を "ドロップ" するTMPテーブルを使用する必要があるでしょうか?

+0

"実装の詳細" ;-)私は基礎となるデータのクラスタリングの変化が疑わしいと思います。その特定のエンジンで「ヒープ」に移動するか、別の方法で再クラスタ化しますか? (InnoDB?MyISAM?)これはDDL操作であり、一般的ではないため、特によくテストされた/検証済みのコードパスを再利用できる場合、「最も簡単な方法」が「最良の方法」です。 –

答えて

5

複合主キーの場合を考えてください。この場合、DBエンジンは合成キーから新しいクラスタードインデックスを作成する必要があります。これは行を移動する必要があります。 (行は主キーによってディスク上で物理的に順序付けされることに注意してください。)この状況の希少性を考えると、プライマリキーがすでに整数である特殊なケースを処理する価値はありません。

関連する問題