【发布时间】:2013-03-11 21:03:44
【问题描述】:
我使用 MySQL 5.6 运行比较 INSERTing 行到一个空表中。
每个表都包含一个按 AUTO_INCREMENT 顺序递增的列(ascending)和一对列(random_1、random_2)接收随机的、唯一的数字。
在第一个测试中,ascending 是 PRIMARY KEY,(random_1, random_2) 是 KEY。在第二个测试中,(random_1, random_2) 是 PRIMARY KEY,ascending 是 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%。任何人都可以推测为什么?
【问题讨论】:
-
我可以推测,但在您告诉我们“测试”是什么之前,这样做几乎没有意义。
-
尽快插入 100 万行。
-
我认为第二个测试不会像您认为的那样。看到这个:dba.stackexchange.com/questions/3467/…
-
你为什么这么认为?一些评论指出 AUTO_INCREMENT 确实适用于非 PK(我的测试证明了这一点)。至于“为什么?”,我们有几个需要完成的大量连接,一个以 升序 顺序与另一个表连接,一个以 随机 顺序与一个表连接(不是真的随机,而是按照升序随机)。
标签: mysql primary-key auto-increment