INSERT e UPDATE o desempenho varia pouco:será quase o mesmo para (INT) e (INT, INT) chaves. SELECT desempenho da PRIMARY KEY composta depende de muitos fatores. Se sua tabela for
InnoDB , a tabela será agrupada implicitamente na PRIMARY KEY valor. Isso significa que as pesquisas por ambos os valores serão mais rápidas se ambos os valores incluírem a chave:nenhuma pesquisa de chave extra será necessária.
Supondo que sua consulta seja algo assim:
SELECT *
FROM mytable
WHERE col1 = @value1
AND col2 = @value2
e o layout da mesa é este:
CREATE TABLE mytable (
col1 INT NOT NULL,
col2 INT NOT NULL,
data VARCHAR(200) NOT NULL,
PRIMARY KEY pk_mytable (col1, col2)
) ENGINE=InnoDB
, o mecanismo precisará apenas pesquisar o valor exato da chave na própria tabela.
Se você usar um campo de autoincremento como um ID falso:
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
, o mecanismo precisará, primeiro, pesquisar os valores de
(col1, col2) no índice ix_mytable_col1_col2 , recupera o ponteiro de linha do índice (o valor de id ) e faça outra pesquisa por id na própria tabela. Para
MyISAM tabelas, no entanto, isso não faz diferença, porque MyISAM as tabelas são organizadas em pilha e o ponteiro de linha é apenas o deslocamento do arquivo. Em ambos os casos, um mesmo índice será criado (para
PRIMARY KEY ou para UNIQUE KEY ) e será usado da mesma maneira.