1

次のcreateステートメントを使用しました。

CREATE TABLE `subscr` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `media_id` int(11) NOT NULL,
 `user_id` int(11) NOT NULL,
 `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 UNIQUE KEY (`media_id`, `user_id`),
 CONSTRAINT FOREIGN KEY (`media_id`) REFERENCES `media` (`id`) ON DELETE CASCADE,
CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB

InnoDBがuser_idにのみインデックスを付けるのはなぜですか?すべての外部キー参照にインデックスが必要だと思いました。

CREATE TABLE `subscr` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `media_id` int(11) NOT NULL,
 `user_id` int(11) NOT NULL,
 `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 UNIQUE KEY `media_id` (`media_id`,`user_id`),
 KEY `user_id` (`user_id`),
 CONSTRAINT `subscriptions_media_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES `media` (`id`) ON DELETE CASCADE,
 CONSTRAINT `subscriptions_media_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB
4

1 に答える 1

1

media_idにもインデックスがあり、一意です。MySQLの場合はそれで十分です。一意のインデックスのuser_idは2番目であり、外部キーには使用できないため、user_id用に作成された個別のインデックスがあります。

于 2012-06-15T22:43:51.447 に答える