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
) и ще се използва по същия начин.