INSERT
and UPDATE
性能差异很小:几乎相同(INT)
and (INT, INT)
keys.
SELECT
复合材料性能PRIMARY KEY
取决于很多因素。
如果你的桌子是InnoDB
,那么该表隐式地聚集在PRIMARY KEY
value.
这意味着如果两个值都包含键,则搜索这两个值将会更快:不需要额外的键查找。
假设您的查询是这样的:
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
,那么引擎首先需要查找的值(col1, col2)
在索引中ix_mytable_col1_col2
,从索引中检索行指针(的值id
)并通过以下方式进行另一次查找id
在表本身中。
For MyISAM
然而,这没有什么区别,因为MyISAM
表是堆组织的,行指针只是文件偏移量。
在这两种情况下,都会创建相同的索引(对于PRIMARY KEY
or for UNIQUE KEY
) 并将以相同的方式使用。