INSERT
và UPDATE
hiệu suất thay đổi một chút:nó sẽ gần như giống nhau đối với (INT)
và (INT, INT)
chìa khóa.
SELECT
hiệu suất của tổng hợp PRIMARY KEY
phụ thuộc vào nhiều yếu tố.
Nếu bảng của bạn là InnoDB
, sau đó bảng được nhóm ngầm trên PRIMARY KEY
giá trị.
Điều đó có nghĩa là tìm kiếm cả hai giá trị sẽ nhanh hơn nếu cả hai giá trị đều bao gồm khóa:không cần tra cứu thêm khóa.
Giả sử truy vấn của bạn giống như sau:
SELECT *
FROM mytable
WHERE col1 = @value1
AND col2 = @value2
và bố cục bảng là sau:
CREATE TABLE mytable (
col1 INT NOT NULL,
col2 INT NOT NULL,
data VARCHAR(200) NOT NULL,
PRIMARY KEY pk_mytable (col1, col2)
) ENGINE=InnoDB
, công cụ sẽ chỉ cần tra cứu giá trị khóa chính xác trong chính bảng.
Nếu bạn sử dụng trường autoincrement làm id giả:
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
col1 INT NOT NULL,
col2 INT NOT NULL,
data VARCHAR(200) NOT NULL,
UNIQUE KEY ix_mytable_col1_col2 (col1, col2)
) ENGINE=InnoDB
, thì trước tiên, engine sẽ cần tra cứu các giá trị của (col1, col2)
trong chỉ mục ix_mytable_col1_col2
, truy xuất con trỏ hàng từ chỉ mục (giá trị của id
) và thực hiện tra cứu khác theo id
trong chính bảng.
Đối với MyISAM
tuy nhiên, điều này không có gì khác biệt, bởi vì MyISAM
các bảng được tổ chức theo nhóm và con trỏ hàng chỉ là phần bù của tệp.
Trong cả hai trường hợp, một chỉ mục giống nhau sẽ được tạo (cho PRIMARY KEY
hoặc cho UNIQUE KEY
) và sẽ được sử dụng theo cách tương tự.