MySQL 5.6 を使用して、行を空のテーブルに挿入する比較を実行しました。
各テーブルには、AUTO_INCREMENT によって連続的にインクリメントされる列 (昇順) と、ランダムで一意の番号を受け取る列のペア ( random_1、random_2 ) が含まれていました。
最初のテストでは、昇順が PRIMARY KEY で、( random_1 , random_2 ) が KEY でした。2 番目のテストでは、( 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
;
一貫して、2 番目のテスト (自動インクリメント列が PRIMARY KEY ではない場合) はわずかに速く実行されます (5 ~ 6%)。その理由を推測できる人はいますか?