mysql - 值得在列上添加索引只是为了使它们成为外键吗?

标签 mysql database database-design database-optimization

我有一个 invitations我数据库中的表,它有一个 fromto列,它们都是 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/

相关文章:

php - "mysql_query() or die()"是否保持打开的 mysql 连接?

mysql - 如果使用 AVG 函数,SQL 查询结果将缩减为单个结果

SQL:存储是/否值的最佳方式?关注大型数据库中的性能

php - 将数据库与外部表连接

c# - 查询仅在我的应用程序中失败,但在 MySQL 中运行良好

mysql - 并发编辑闭包树层次结构时出现死锁

php - 带占位符的 MySQL 查询不起作用

具有两列组合的 SQLite 唯一键

sql - 为什么这个 MySQL 查询不起作用?

带有 mysql 和长时间运行备份的 PHP 应用程序