2014-04-24 23 views
5

Có thể thêm hay bớt nhiều cột trong một truy vấn nhanh hơn là thực hiện truy vấn cho mỗi cột không? Ví dụ: là:Việc thay đổi nhiều cột trong cùng một truy vấn có nhanh hơn không?

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d; 

nhanh hơn?

ALTER TABLE t2 DROP COLUMN c; 
ALTER TABLE t2 DROP COLUMN d; 
+0

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? –

+0

@ 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

+1

Đo lường và tìm ra ... –

Trả lời

3

Có, nó nhanh hơn. Bạn chỉ phải thực hiện một cuộc gọi đến API cơ sở dữ liệu và nó chỉ phải phân tích truy vấn một lần.

Tuy nhiên, đối với các truy vấn ALTER TABLE, hiệu suất thường không phải là mối quan tâm. Bạn không nên làm điều này thường xuyên, chỉ khi bạn thiết kế lại lược đồ của mình.

Nhưng nếu câu hỏi của bạn có khoảng UPDATE truy vấn, chẳng hạn, có thể điều này rất quan trọng. Ví dụ. bạn nên làm:

UPDATE table 
SET col1 = foo, col2 = bar 
WHERE <condition>; 

hơn

UPDATE table 
SET col1 = foo 
WHERE <condition>; 

UPDATE table 
SET col2 = bar 
WHERE <condition>; 
6

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.

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