我正在使用一个来自InnoDB工作台的MySQL数据库,并且被困在一个表的索引上。
我有张桌子
╔═══════════════╗
║ poll_votes ║
╟───────────────╢
║pk poll_id fk║ //references polls.id
║pk voter_id fk║ //references users.id
║ option_id fk║ //references poll_options.id
╚═══════════════╝由于主键是复合键,MySQL自动为poll_id和voter_id生成多列索引。因为每个外键必须有一个相关联的索引,所以MySQL进一步生成与3列对应的3个附加索引。
现在,我在一个3列表上有4个索引,MySQL工作台不允许我删除其中的任何一个,尽管其中一个是多余的。此外,我不需要option_id索引,所以这只是在浪费空间。
在这里,拥有比列更多的索引会伤害我,还是我不应该担心它?这张桌子有更好的设计方法吗?
编辑: SQL (我编辑了一些字段名,所以这里可能有一个错误):
CREATE TABLE `poll_votes` (
`poll_id` int(11) NOT NULL,
`voter_id` int(11) NOT NULL,
`poll_option_id` int(11) NOT NULL,
PRIMARY KEY (`poll_id`,`voter_id`),
KEY `fk_poll_votes_polls1_idx` (`poll_id`),
KEY `fk_poll_votes_poll_votes1_idx` (`poll_option_id`),
KEY `fk_poll_votes_users1_idx` (`voter_id`),
CONSTRAINT `fk_poll_votes_polls1` FOREIGN KEY (`poll_id`) REFERENCES `polls` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `fk_poll_votes_poll_options1` FOREIGN KEY (`poll_option_id`) REFERENCES `poll_options` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `fk_poll_votes_users1` FOREIGN KEY (`voter_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
)发布于 2015-05-13 01:28:12
SET foreign_key_checks = OFF;
CREATE...
SET foreign_key_checks = ON;(不,我不明白为什么那个标志会控制你遇到的问题。)
https://stackoverflow.com/questions/30202519
复制相似问题