我使用的是MySQL,但这个问题不是特定于该特定数据库
我有posts
表和threads
表
没有什么复杂的,当然在posts
内我有 thread_id 列,它将帖子绑定到拥有它们的线程。
我希望在该列上有外键约束(posts
表中的 thread_id ),如:
CONSTRAINT `thread_fk` FOREIGN KEY (`thread_id`) REFERENCES `threads` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
所以问题是,在 thread_id 列上还有第二个索引,它有多聪明? 像这样:
KEY `thread_idx` (`thread_id`)
或:
INDEX `thread_idx` (`thread_id`)
FOREIGN KEY索引会在选择时自己加速,第二个索引是多余的,或者第二个索引是更快选择所必需的,或者在一列上有两个索引是不错的主意?
答案 0 :(得分:1)
我不确定您使用的是哪个RDBMS,但通常外键不会创建索引。为外键中涉及的列创建索引是一种很好的做法。
但您还应该考虑通过创建此索引/ es来尝试优化的查询。让多个索引包含同一列并不一定是坏事。