次の構文でテーブルを作成すると、
CREATE TABLE IF NOT EXISTS `hashes` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`hash` binary(20) NOT NULL,
PRIMARY KEY (`id`,`hash`),
UNIQUE KEY (`hash`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE = 4 AUTO_INCREMENT=1
PARTITION BY KEY(`hash`)
PARTITIONS 10;
そして、次の構文でクエリを挿入します
INSERT INTO hashes (hash) VALUES ($value) ON DUPLICATE KEY UPDATE hash = hash
その後、行が挿入または更新された場合、自動インクリメント列は期待どおりに機能します。
以下のようにパーティションなしでテーブルを作成し、上記のクエリを使用して挿入すると、更新または挿入のたびに自動インクリメント値が 1 増加しA_I
、クエリが 10 回の更新を行ってから 1 回の挿入が行われるため、列があちこちに配置されます。 10位ジャンプする値。
CREATE TABLE IF NOT EXISTS `hashes` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`hash` binary(20) NOT NULL,
PRIMARY KEY (`id`,`hash`),
UNIQUE KEY (`hash`)
) ENGINE=InnoDB AUTO_INCREMENT=1;
更新時に値が増加する理由はINNO_DB
理解できますが、テーブルが分割されている場合に増加しない理由はわかりませんか?