Read/Write 速度是否取决于索引?

Is Read/Write speed dependent upon indexes?

我有一个名为 Votes 的 table。现在我在它的某些列上有一些 FK(外键)。另外如您所知,我需要在 FK 列上创建一个索引。如果我在 列上创建索引(例如 Votes.user_id on User.id ,读写速度会增加还是减少?

我问是因为我需要在多个列上设置 FK:

// Votes table
 . post_id on Posts.id
 . user_id on Users.id
 . author_id on Users.id

我还需要 (Post_id, user_id) 上的唯一索引来检测重复投票。无论如何,三个独立的索引和一个唯一的索引在投票上是很正常的事情 table?

创建索引可加快读取速度,但会减慢写入速度。

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

写入访问因索引而变慢,因为索引也需要更新。 但这种性能损失是有限的。 相比之下,如果你想在不使用索引的情况下搜索、排序或连接表,性能损失可能是巨大的。 对于一定大小的表,搜索和排序非常慢,如果没有适当的索引,几乎不可能连接。

因此,在您的情况下,您在问题中定义的索引集不仅仅是 "normal",它是最小值(恕我直言)。您不太可能需要更多,具体取决于其他列和您的查询。

  1. 决定哪些索引将加速 SELECTsUPDATEs。如果不知道要搜索什么,就无法真正选择索引。
  2. 不用担心它会减慢多少(不多)写入速度。

More on creating indexes 将帮助您决定哪些索引值得拥有。