我运行了一个比较,使用MySQL 5.6将行插入空表中。在PRIMARY KEY上使用AUTO_INCREMENT的MySQL性能
每个表包含在被串联AUTO_INCREMENT递增接收随机的,独特的数字的列(升序),和一对列(random_1,random_2)。
在第一测试中,升序是PRIMARY KEY和(random_1,random_2)是关键。在第二个测试中,(random_1,random_2)是PRIMARY 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
;
一致地,第二测试(其中,自动递增列不的主键)运行速度稍快 - 5-6%。任何人都可以推测为什么?
我可以推测,但是在你告诉我们“测试”是什么之前,没有什么意义。 – Hazzit 2013-03-11 21:06:29
尽可能快地插入100万行。 – Chap 2013-03-11 21:25:44
我不认为第二个测试会做你认为它的作用。看到这个:http://dba.stackexchange.com/questions/3467/mysql-why-is-auto-increment-limited-to-just-primary-keys – Hazzit 2013-03-11 22:10:07