INSERT и UPDATE производителността варира малко:тя ще бъде почти същата за (INT) и (INT, INT) ключове.
SELECT изпълнение на съставен PRIMARY KEY зависи от много фактори.
Ако вашата таблица е InnoDB , тогава таблицата е имплицитно групирана в PRIMARY KEY стойност.
Това означава, че търсенето на двете стойности ще бъде по-бързо, ако и двете стойности съдържат ключа:няма да е необходимо допълнително търсене на ключ.
Ако приемем, че вашата заявка е нещо подобно:
SELECT *
FROM mytable
WHERE col1 = @value1
AND col2 = @value2
и оформлението на таблицата е следното:
CREATE TABLE mytable (
col1 INT NOT NULL,
col2 INT NOT NULL,
data VARCHAR(200) NOT NULL,
PRIMARY KEY pk_mytable (col1, col2)
) ENGINE=InnoDB
, двигателят просто ще трябва да потърси точната стойност на ключа в самата таблица.
Ако използвате поле за автоматично увеличение като фалшив идентификатор:
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
, тогава двигателят ще трябва първо да търси стойностите на (col1, col2) в индекса ix_mytable_col1_col2 , извличане на показалеца на ред от индекса (стойността на id ) и направете друго търсене чрез id в самата таблица.
За MyISAM таблици обаче, това не прави разлика, защото MyISAM таблиците са организирани в купчина и показалецът на реда е само изместване на файла.
И в двата случая ще бъде създаден един и същ индекс (за PRIMARY KEY или за UNIQUE KEY ) и ще се използва по същия начин.