外键真的会降低性能,还是最好不要使用它?

时间:2018-09-11 18:31:54

标签: php mysql mysqli

我正在尝试通过使用laravel关系来构建数据库。据我所知,外键是确保数据完整性和正确性的好方法。为什么不?我想用它。

我的问题是:

a)在mysql中使用外键真的会降低性能吗?如果是,为什么会变慢?

b)如果速度变慢,我该怎么办?最好根本不使用它吗?

1 个答案:

答案 0 :(得分:0)

A。是的,没有。假设您在存储所有堆栈溢出问题的大表中包括一个用户ID,该用户ID用于发布问题的人。受此影响的查询类型是,如果您查找特定用户ID的所有堆栈溢出问题。
推理类似于“如果随机订购了十亿个问题,您怎么知道您已经为用户Giorgi找到了所有问题?”。直觉告诉我们,您必须检查所有十亿个问题。 这里重要的是     1.有大量的记录     2.您必须检查每个问题,才能知道已找到所有匹配的问题。

但是,它只会影响使用此新字段的搜索。

然后回答第二个问题:

B。如果我们按用户ID对问题进行排序,则不必查看所有记录即可知道已经找到了所有记录!在SQL中,这称为“索引表”。您可以通过指定表(在本例中为问题),然后指定要根据(userID)索引或排序的字段来完成此操作。

这是SQL优化中的常见做法,尤其是在大表上的外键中。我认为,超过10,000条记录的任何内容都可以通过这种方式建立索引,但是真正的基准是您的搜索是否运行缓慢。如果它们没有引起任何问题,则没有索引的必要,因为与此相关的开销很小。

希望这能回答您的问题!