读/写速度是否取决于索引?

时间:2015-12-25 22:32:15

标签: mysql database-design indexing foreign-keys unique-constraint

我有一个名为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表上是正常的东西吗?

3 个答案:

答案 0 :(得分:2)

创建索引会加快读取速度,但会降低写入速度。

答案 1 :(得分:1)

外键和唯一索引可以保证数据的完整性。 你不应该跳过它们,除非你有充分的理由。 你很少(或根本没有)找到这样的理由。

写入访问因索引而变慢,因为索引也需要更新。 但这种性能损失是有限的。 相反,如果要在不使用索引的情况下搜索,排序或连接表,则性能损失可能会非常大。 从一定大小的表中,搜索和排序非常缓慢,如果没有适当的索引,几乎不可能加入。

因此,在您的情况下,您在问题中定义的索引集合不仅仅是"正常",它是最小值(恕我直言)。根据其他列和您的查询,您不一定需要更多其他内容。

答案 2 :(得分:1)

  1. 确定哪些索引会加快SELECTsUPDATEs的速度。如果不知道要搜索的内容,就无法真正选择索引。
  2. 不要担心它会减慢多少(不多)写入速度。
  3. More on creating indexes将帮助您确定哪些索引值得拥有。