【问题标题】:Is Read/Write speed dependent upon indexes?读/写速度是否取决于索引?
【发布时间】:2016-03-31 17:40:36
【问题描述】:

我有一个名为Votes 的表。现在我在它的一些列上有几个 FK(外键)。如您所知,我需要在 FK 列上创建一个索引。如果我在列上创建索引(例如User.id上的Votes.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 表上是正常的吗?

【问题讨论】:

  • 顺便说一句:author_id 接缝是多余的。我猜它已经存储在Posts 表中。
  • @PaulSpiegel 是的author_id 已经存储在Posts 表中,但是我需要在使用触发器插入投票后向作者发送通知。
  • 您可以从Posts 中选择author_id 或在触发器中的INSERT/UPDATE 语句中使用JOIN Posts。也许你就这个问题提出了一个新问题,因为这里已经过时了。

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


【解决方案1】:

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

【讨论】:

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

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

    【讨论】:

      【解决方案3】:

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

      索引会减慢写访问速度,因为索引也需要更新。 但是这种性能损失是有限的。 相反,如果您想在不使用索引的情况下搜索、排序或连接表,则性能损失可能会很大。 对于一定大小的表,搜索和排序非常慢,如果没有适当的索引,几乎不可能进行连接。

      因此,在您的情况下,您在问题中定义的索引集不仅仅是“正常”,而是最小值(恕我直言)。根据其他列和您的查询,您可能还需要更多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多