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.