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
,那么发动机就需要,第一,查找索引ix_mytable_col1_col2的(col1, col2)值,从索引检索该行指针(值为id),并在表格本身中通过id进行另一次查找。
对于MyISAM表,但这并没有什么区别,因为MyISAM表是堆组织的,行指针只是文件偏移量。
在这两种情况下,都会创建相同的索引(对于PRIMARY KEY或对于UNIQUE KEY)并且将以相同的方式使用。