2011-11-22 13 views
5

Quando si utilizza il comando:Perché MySQL usa una tabella temporanea per rilasciare una chiave primaria?

ALTER TABLE my_table DROP PRIMARY KEY; 

Lo stato (quando SHOW PROCESSLIST) appare come:

copy to tmp table 

Perché avrebbe bisogno di utilizzare una tabella tmp a "goccia" un vincolo di chiave primaria?

+0

"dettagli di implementazione" ;-) Sospetto che le modifiche del cluster di dati sottostanti - ad es. si sposta su un "heap" o altrimenti si ricompone in quel particolare motore? (InnoDB? MyISAM?) Poiché si tratta di un'operazione DDL - e non comune - il "modo più semplice" è spesso il "modo migliore", soprattutto se può riutilizzare percorsi di codice ben testati/verificati. –

risposta

5

Considerare il caso di una chiave primaria composita. In questo caso, il motore DB deve creare un nuovo indice cluster da una chiave sintetica, che richiederà lo spostamento delle righe. (Ricorda che le righe sono ordinate fisicamente su disco dalla chiave primaria.) Data la rarità di questa situazione, non vale la pena di gestire il caso speciale in cui la tua chiave primaria è già un numero intero.

Problemi correlati