1

我的数据库中有一个invitations表,它有一个fromto列,它们都是userIdusers表中列的外键。

例如,如果用户#1 邀请用户#2 做某事,那么在invitations表中,from将是 1,to将是 2。

我将to在 where 语句中使用该列,例如:

SELECT * FROM invitations WHERE `to` = $currentUserId

但是该from列永远不会在 WHERE 语句中使用。

根据我的阅读,您应该只在将在 WHERE 语句中使用的列上添加一个索引,但是我也读过您应该始终创建外键。

from仅仅为了添加外键而创建索引对我来说有意义吗?

4

2 回答 2

2

对于外键,您应该根据您对用户的操作添加一个。

在内部,您的 fkey 将在邀请的任何插入/更新/删除以及用户(id)的任何更新/删除时触发操作。

其中第一个将使用 users(id) 上的索引来检查用户是否存在。

另一个本质上将运行一个查询:do whatever you defined to do on update/delete from invitations where to/from = :id.

因此,如果您更改用户的 id(非常不可能),您可以使用索引。如果您偶尔删除用户(只是可能性稍大一些),您可以使用索引。

正如另一个答案中所指出的,索引对于带有 order by/limit 子句的查询也很有用。

于 2011-05-21T16:10:55.220 回答
1

您应该只在将在 WHERE 语句中使用的列上添加索引

它不是那么干燥。这是一个很好的经验法则,但不仅仅是这个。

您还应该经常和始终索引您排序的列,始终在更改之前和之后进行测试,以查看您是否提高了性能。

外键通常不会受益于在其上定义索引,只要它们不是 where/order by 子句的一部分。如果是,您应该索引它们。(再次,经验法则)。

看起来是优化 MySQL 的一个很好的资源——看看它解释索引的底部。

于 2011-05-21T16:08:33.460 回答