我有一个 invitations
我数据库中的表,它有一个 from
和 to
列,它们都是 userId
的外键我的专栏 users
表。
例如,如果用户 # 1 邀请用户 # 2 做某事,那么在 invitations
中表,from
将为 1,并且 to
将是 2。
我将使用 to
where 语句中的列,例如:
SELECT * FROM invitations WHERE `to` = $currentUserId
但是 from
列永远不会在 WHERE 语句中使用。
根据我的阅读,您应该只在将在 WHERE 语句中使用的列上添加索引,但是我还读到您应该始终创建外键。
在 from
上创建索引对我来说有意义吗?只是为了添加一个外键?
最佳答案
如果是外键,您应该根据对用户的操作添加一个。
在内部,您的 fkeys 将在任何插入/更新/删除邀请时触发一个 Action ,但也会在任何更新/删除用户(id)时触发一个 Action 。
其中第一个将使用 users(id) 上的索引来检查用户是否存在。
另一个基本上会运行一个查询:做任何你定义的关于更新/从邀请中删除的操作,其中 to/from = :id
。
因此,如果您更改用户的 ID(不太可能),您可以使用索引。如果您偶尔删除用户(可能性稍大),您可以使用索引。
正如在另一个答案中指出的那样,索引对于带有 order by/limit 子句的查询也很有用。
关于mysql - 值得在列上添加索引只是为了使它们成为外键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082869/