2012-06-15 69 views
0

我用下面的創建語句:InnoDB的唯一鍵和索引

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 

回答

0

media_id也具有索引,並且它是唯一的。這對於MySQL來說已經足夠了。只爲user_id創建了一個單獨的索引,因爲唯一索引中的user_id是第二個索引,因此對於外鍵是沒用的。