我使用 MySQL 5.6 将比较 INSERTing 行插入到一个空表中。
每个表都包含一个按 AUTO_INCREMENT 顺序递增的列(升序)和一对接收随机唯一数字的列( random_1、random_2 )。
在第一个测试中,升序是 PRIMARY KEY,(random_1,random_2)是 KEY。在第二个测试中,( random_1 , random_2 ) 是 PRIMARY KEY 并且升序是 KEY。
CREATE TABLE clh_test_pk_auto_increment (
ascending_pk BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, -- PK
random_ak_1 BIGINT UNSIGNED NOT NULL, -- AK1
random_ak_2 BIGINT UNSIGNED, -- AK2
payload VARCHAR(40),
PRIMARY KEY ( ascending_pk ),
KEY ( random_ak_1, random_ak_2 )
) ENGINE=MYISAM
AUTO_INCREMENT=1
;
CREATE TABLE clh_test_auto_increment (
ascending_ak BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, -- AK
random_pk_1 BIGINT UNSIGNED NOT NULL, -- PK1
random_pk_2 BIGINT UNSIGNED, -- PK2
payload VARCHAR(40),
PRIMARY KEY ( random_pk_1, random_pk_2 ),
KEY ( ascending_ak )
) ENGINE=MYISAM
AUTO_INCREMENT=1
;
始终如一地,第二个测试(自动增量列不是PRIMARY KEY)运行得稍微快一些——5-6%。任何人都可以推测为什么?