2012-06-15 3 views
0

I 만들기 다음 문 사용 :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 

왜 이노은 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에 대해 별도의 색인이 작성되므로 외래 키에는 쓸모가 없습니다.

관련 문제