2011-11-22 12 views
5

Przy użyciu polecenia:Dlaczego MySQL używa tabeli tymczasowej do usunięcia klucza podstawowego?

ALTER TABLE my_table DROP PRIMARY KEY; 

Stan (gdy SHOW PROCESSLIST) pojawia się jako:

copy to tmp table 

Dlaczego to trzeba użyć tabeli tmp "rzucić" na klucz podstawowy?

+0

"szczegóły implementacji" ;-) Podejrzewam, że zmiany w klastrze danych bazowych - np. przenosi się do "kupy" lub w inny sposób ponownie klastruje w tym konkretnym silniku? (InnoDB? MyISAM?) Ponieważ jest to operacja DDL - i nie jest popularna - "najprostsza metoda" jest często "najlepszym rozwiązaniem", zwłaszcza jeśli może ponownie wykorzystać dobrze przetestowane/zweryfikowane ścieżki kodu. –

Odpowiedz

5

Rozważ przypadek złożonego klucza podstawowego. W tym przypadku silnik bazy danych musi utworzyć nowy indeks klastrowy z klucza syntetycznego, który będzie wymagał przeniesienia wierszy. (Należy pamiętać, że wiersze są fizycznie sortowane na dysku przez klucz podstawowy.) Biorąc pod uwagę rzadkość tej sytuacji, nie jest tak naprawdę warto obsługiwać specjalny przypadek, w którym klucz podstawowy jest już liczbą całkowitą.

Powiązane problemy