索引多于列的 MySQL 表

标签 mysql database innodb mysql-workbench

我正在使用 MySQL Workbench 中的 InnoDB MySQL 数据库,并且卡在一个表的索引上。

我有一张 table

╔═══════════════╗
║  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 Workbench 不允许我删除其中任何一个,即使其中一个是多余的。此外,我永远不需要 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
)

最佳答案

SET foreign_key_checks = OFF;
CREATE...
SET foreign_key_checks = ON;

(不,我不明白为什么该标志控制您遇到的问题。)

关于索引多于列的 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30202519/

相关文章:

java - 一个数据库单元格中的多个日期

mysql - 防止 'too many connections'(ConnectionPool不是答案,寻找mysql服务器端解决方案)

mysql - 复合外键可以吗?

mysql - 可以直接将foreign的Innodb转换成mysiam吗?

MySQL:使用 IN(...) 索引强制不同的 access_type

php - 从外部 FTP 站点导入 csv 文件

mysql - 添加新行后如何自动排序数据库表中的 ID?

database - 将数据库复制到其他系统的最佳方法

java - JTable 列标题

python - 如何在模型文件中建立 django 模型应定义为 NOT NULL?