我应该为每个外键创建索引吗?
问题描述:
我有表部门,有两列(dept_ID和dept_name) 我的另一个表是登录,我创建一个外键的列dept_name引用表部门的dept_name。所以我创建了一个名为index_department的索引,现在在登录表中,我想为列eadd创建另一个外键,它将引用名为info_table的DIFFERENT表。我应该为每个外键创建索引吗?
我应该为第二个外键创建另一个索引吗?
另一种情况下,我想创建一个名为info_table的dept_name列。我可以使用相同的索引'index_department'吗?
答
一般的答案是“这取决于”。
由于@ gordon-Linoff评论说:“您创建索引以满足查询的性能要求。”
索引占用空间并将处理时间视为必须维护。因此,任何给定指数的情况取决于成本和使用之间的折衷。例如,如果您的数据很少发生变化,但是您会查看很多,您将更愿意拥有更多索引。
我的教育猜测是,在你可能工作的规模上,你确实需要所有外键上的索引。
具体在mysql中,你似乎得到的索引是你正式添加FK约束。这里讨论does mysql index foreign key columns automatically
我正式说,因为你可以有隐含的外键关系而不需要实际声明/强制约束。人们有时会这样做以避免检查/强制约束的成本。风险在于违反参照完整性的更新。但我正在漂移到一条切线。
答
在MySQL(至少5.6,这是我现在用的)一些相关的讨论,指数将自动为外键创建。
是否有任何理由为什么引用'department.dept_name'而不是'department.id'? – 2014-11-25 14:06:34
您可以创建索引以满足查询的性能要求。你想运行哪些查询可能会使用这样的索引?你可以用例子编辑你的问题。 – 2014-11-25 14:09:22
外键总是索引。 – 2014-11-25 14:16:52