INSERT und UPDATE Die Leistung variiert nur wenig:Sie wird für (INT) fast gleich sein und (INT, INT) Tasten.
SELECT Leistung des zusammengesetzten PRIMARY KEY hängt von vielen Faktoren ab.
Wenn Ihre Tabelle InnoDB ist , dann wird die Tabelle implizit auf dem PRIMARY KEY geclustert Wert.
Das bedeutet, dass die Suche nach beiden Werten schneller ist, wenn beide Werte den Schlüssel enthalten:Es ist keine zusätzliche Schlüsselsuche erforderlich.
Angenommen, Ihre Abfrage lautet in etwa so:
SELECT *
FROM mytable
WHERE col1 = @value1
AND col2 = @value2
und das Tabellenlayout ist dieses:
CREATE TABLE mytable (
col1 INT NOT NULL,
col2 INT NOT NULL,
data VARCHAR(200) NOT NULL,
PRIMARY KEY pk_mytable (col1, col2)
) ENGINE=InnoDB
, muss die Engine nur den genauen Schlüsselwert in der Tabelle selbst nachschlagen.
Wenn Sie ein Autoincrement-Feld als gefälschte ID verwenden:
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
, dann muss die Engine zuerst die Werte von (col1, col2) nachschlagen im Index ix_mytable_col1_col2 , rufen Sie den Zeilenzeiger aus dem Index ab (der Wert von id ) und führen Sie eine weitere Suche nach id durch in der Tabelle selbst.
Für MyISAM Tabellen macht das aber keinen Unterschied, weil MyISAM Tabellen sind Heap-organisiert und der Zeilenzeiger ist nur ein Datei-Offset.
In beiden Fällen wird derselbe Index erstellt (für PRIMARY KEY oder für UNIQUE KEY ) und wird auf die gleiche Weise verwendet.