Vâng, nó phải được nhanh hơn để chạy một ALTER TABLE đơn hơn hai.
Theo kinh nghiệm của tôi (với InnoDB trên 5.1 và 5.5), MySQL dường như không sửa đổi bảng "tại chỗ". MySQL thực sự tạo ra một bảng mới, như bản sao của bảng cũ với các sửa đổi được chỉ định.
Hai câu lệnh riêng biệt sẽ yêu cầu MySQL thực hiện thao tác sao chép đó hai lần.
Với một tuyên bố duy nhất, bạn cung cấp cho MySQL cơ hội thực hiện tất cả các thay đổi chỉ với một thao tác sao chép. (Tôi không biết chi tiết về nội bộ MySQL, nhưng có thể MySQL thực sự sao chép hai lần.)
Các công cụ cơ sở dữ liệu khác (MyISAM et al.) Có thể được xử lý khác nhau.
Tôi tin rằng các plugin InnoDB và/hoặc các phiên bản mới hơn của InnoDB trong MySQL (> 5.5) có một số thuật toán khác so với phương pháp "sao chép", ít nhất là đối với một số thay đổi, cho phép cho bảng để vẫn có sẵn trong khi ALTER TABLE đang chạy (cho các truy vấn đọc). Nhưng tôi không biết tất cả các chi tiết.
Bạn có thực hiện thao tác này một cách mạnh mẽ và chịu tải nặng không? –
@ Bencaine Có quan trọng không? Tôi có nghĩa là bao lâu thì bạn sẽ cần phải làm điều này. Hầu như không bao giờ, phải không? – Strawberry
Đo lường và tìm ra ... –