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

yhqotfr8  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(318)

这个问题在这里已经有答案了

外键是否提高了查询性能(9个答案)
两年前关门了。
我正试图用laravel关系建立一个数据库。据我所知,外键是确保数据完整性和正确性的好方法。为什么不?我想用它。
我的问题是:
a) 在mysql中使用外键真的会降低性能吗?如果是,为什么会变慢?
b) 如果速度变慢了,我该怎么办?一点也不用是不是更好?

lp0sw83n

lp0sw83n1#

答。是和否。假设在存储所有堆栈溢出问题的大表中包含一个userid,其中用户id是发布问题的人的。受此影响的查询类型是查找特定用户标识的所有堆栈溢出问题。
这种推理类似于“如果有10亿个问题随机排列,你怎么知道你已经找到了用户giorgi的所有问题?”。直觉告诉我们你必须检查所有的问题。这里最重要的是1。有大量的记录2。你必须检查每一个,知道你已经找到了所有匹配的问题。
但是,它只会影响使用此新字段的搜索。
那么回答你的第二个问题:
b。如果我们按照userid对问题进行排序,那么我们就不必查看所有的记录就知道我们已经找到了所有的记录!在sql中,这称为“索引表”。您可以通过指定表(在本例中是问题)和要索引或排序的字段(userid)来实现。
这是sql优化中的常见做法,特别是在大型表上的外键中。在我看来,任何超过10000条记录都可以作为这种索引方式的候选,但真正的基准是您的搜索是否执行缓慢。如果它们没有引起任何问题,那么就没有理由建立索引,因为与之相关的开销很小。
希望这能回答你的问题!

相关问题