Mysql 我应该为每个外键创建索引吗?

Mysql 我应该为每个外键创建索引吗?,mysql,Mysql,我的表department有两列(dept\u ID和dept\u name) 我的另一个表是login,我为列dept\u name创建了一个外键,引用表department中的dept\u name。所以我创建了一个名为index_department的索引,现在在login表中,我想为列eadd创建另一个外键,它将引用名为info_table的不同表 我应该为第二个外键创建另一个索引吗 另一种情况是,我想在info_表中创建dept_name列。我可以使用相同的索引“索引部门”吗?一般的答

我的表department有两列(dept\u ID和dept\u name) 我的另一个表是login,我为列dept\u name创建了一个外键,引用表department中的dept\u name。所以我创建了一个名为index_department的索引,现在在login表中,我想为列eadd创建另一个外键,它将引用名为info_table的不同表

我应该为第二个外键创建另一个索引吗

另一种情况是,我想在info_表中创建dept_name列。我可以使用相同的索引“索引部门”吗?

一般的答案是,“视情况而定。”


正如@gordon Linoff评论的那样,“您创建索引是为了满足查询的性能要求。”

索引占用空间和处理时间,因为必须维护索引。因此,任何给定指标的情况取决于成本和使用之间的权衡。例如,如果数据很少更改,但经常查找,则更希望有更多索引

我有根据的猜测是,在您工作的范围内,您可能确实需要所有外键上的索引

特别是在mysql中,您似乎得到的索引是正式添加FK约束。这里讨论这个问题

我正式地说,因为您可以隐含外键关系,而无需实际声明/强制执行约束。人们有时这样做是为了避免检查/强制执行约束的成本。风险在于违反引用完整性的更新。但我正在偏离正切


作为旁注,这里有一些相关的讨论

在MySQL中(至少5.6,我正在使用),索引是为外键自动创建的。

有什么理由引用
department.dept\u name
而不是
department.id
?您创建索引是为了满足查询的性能要求。您希望运行哪些可能使用此类索引的查询?您可以用示例编辑您的问题。外键总是被索引的。我引用名称以便每次查看子表时,部门名称都会出现,而不是ID。我不应该为这个小数据库使用索引吗?我真的不明白什么时候使用索引,为什么你不问什么是索引,什么时候使用它们,而是问索引什么和FK什么?如果你没有足够的知识去理解,你能看出给你详细的答案是多么愚蠢吗?如果你只是想要一个复制粘贴解决方案,那么你就找错地方了,我不知道女性图片和初学者问题是怎么回事,但这种趋势似乎是对那些帮助他人的人的极大侮辱。