2011-11-22 32 views
5

Khi sử dụng lệnh:Tại sao MySQL sử dụng bảng tạm thời để thả khóa chính?

ALTER TABLE my_table DROP PRIMARY KEY; 

Nhà nước (khi HIỂN THỊ processlist) xuất hiện như:

copy to tmp table 

Tại sao nó sẽ cần phải sử dụng một bảng tmp để "thả" một ràng buộc khoá chính?

+0

"chi tiết triển khai" ;-) Tôi sẽ nghi ngờ các thay đổi phân cụm dữ liệu cơ bản - ví dụ: nó di chuyển đến một "đống" hoặc các cụm lại trong công cụ cụ thể đó? (InnoDB? MyISAM?) Vì nó là một hoạt động DDL - và không phải là một hoạt động phổ biến - "cách đơn giản nhất" thường là "cách tốt nhất", đặc biệt nếu nó có thể tái sử dụng các đường dẫn mã được kiểm tra/xác minh. –

Trả lời

5

Xem xét trường hợp của khóa chính kết hợp. Trong trường hợp này, công cụ DB phải tạo chỉ mục nhóm mới từ khóa tổng hợp, sẽ yêu cầu di chuyển các hàng xung quanh. (Hãy nhớ rằng các hàng được đặt vật lý trên đĩa bằng khóa chính.) Do tính hiếm có của tình huống này, nó không thực sự đáng giá để xử lý trường hợp đặc biệt mà khóa chính của bạn đã là một số nguyên.

Các vấn đề liên quan