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
,引擎只需要在表本身中查找确切的键值。
如果您使用自动增量字段作为假 id:
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)并以相同的方式使用。