我運行了一個比較,使用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