我有一个名为Votes
的表。现在我的一些列上有一些FK(外键)。如您所知,我需要在FK列上创建索引。如果我在列上创建索引(例如Votes.user_id
上的User.id
),读写速度会增加还是减少?
我问,因为我需要设置多个列来设置FK:
// Votes table
. post_id on Posts.id
. user_id on Users.id
. author_id on Users.id
此外,我需要在(Post_id, user_id)
上使用唯一索引来检测重复投票。无论如何,三个分离的索引和一个唯一索引在Votes表上是正常的东西吗?
答案 0 :(得分:2)
创建索引会加快读取速度,但会降低写入速度。
答案 1 :(得分:1)
外键和唯一索引可以保证数据的完整性。 你不应该跳过它们,除非你有充分的理由。 你很少(或根本没有)找到这样的理由。
写入访问因索引而变慢,因为索引也需要更新。 但这种性能损失是有限的。 相反,如果要在不使用索引的情况下搜索,排序或连接表,则性能损失可能会非常大。 从一定大小的表中,搜索和排序非常缓慢,如果没有适当的索引,几乎不可能加入。
因此,在您的情况下,您在问题中定义的索引集合不仅仅是"正常",它是最小值(恕我直言)。根据其他列和您的查询,您不一定需要更多其他内容。
答案 2 :(得分:1)
SELECTs
和UPDATEs
的速度。如果不知道要搜索的内容,就无法真正选择索引。More on creating indexes将帮助您确定哪些索引值得拥有。