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

Mysql 读/写速度是否取决于索引?,mysql,database-design,indexing,foreign-keys,unique-constraint,Mysql,Database Design,Indexing,Foreign Keys,Unique Constraint,我有一个名为“投票”的表。现在我在它的一些列上有一些FK(外键)。正如您所知,我需要在FK列上创建一个索引。如果我在列上创建索引(例如用户id上的投票.user\id),读写速度会提高还是降低 我之所以这样问,是因为我需要在多个列上设置FK: // Votes table . post_id on Posts.id . user_id on Users.id . author_id on Users.id 另外,我需要一个关于(Post\u id,user\u id)的唯一索引来检测重复

我有一个名为“投票”的表。现在我在它的一些列上有一些FK(外键)。正如您所知,我需要在FK列上创建一个索引。如果我在列上创建索引(例如
用户id
上的
投票.user\id
),读写速度会提高还是降低

我之所以这样问,是因为我需要在多个列上设置FK:

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

另外,我需要一个关于
(Post\u id,user\u id)
的唯一索引来检测重复投票。无论如何,在投票表上,三个独立的索引和一个唯一的索引是很正常的事情。

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

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

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

由于索引也需要更新,所以写访问会被索引减慢。 但这种性能损失是有限的。 相比之下,如果您希望在不使用索引的情况下搜索、排序或联接表,则性能损失可能是巨大的。 对于一定大小的表,搜索和排序非常慢,并且在没有适当索引的情况下几乎不可能进行连接


因此,在您的情况下,您在问题中定义的索引集不仅是“正常”,而是最小值(IMHO)。根据其他列和您的查询,您可能还需要一些。外键和唯一索引赋予了数据的完整性。 除非你有很好的理由,否则你不应该跳过它们。 你很少(或根本不会)找到这样的理由

由于索引也需要更新,所以写访问会被索引减慢。 但这种性能损失是有限的。 相比之下,如果您希望在不使用索引的情况下搜索、排序或联接表,则性能损失可能是巨大的。 对于一定大小的表,搜索和排序非常慢,并且在没有适当索引的情况下几乎不可能进行连接

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

  • 决定哪些索引将加速
    选择
    更新
    。如果不知道要搜索什么,就无法真正选择索引
  • 不要担心它会降低多少写速度
  • 将帮助您决定哪些索引值得拥有

  • 决定哪些索引将加速
    选择
    更新
    。如果不知道要搜索什么,就无法真正选择索引
  • 不要担心它会降低多少写速度

  • 将帮助您决定哪些索引值得拥有。

    顺便说一句:
    author\u id
    seams是多余的。我猜它已经存储在
    Posts
    表中。@PaulSpiegel Yes
    author\u id
    已经存储在
    Posts
    表中,但是我需要在使用触发器插入投票后向作者发送通知。您可以从
    帖子中选择
    作者id
    ,或者在触发器中的
    插入
    /
    更新
    语句中使用
    加入帖子。也许你在这个问题上问了一个新问题,因为它不在这里。顺便说一句:
    author\u id
    seams是多余的。我猜它已经存储在
    Posts
    表中。@PaulSpiegel Yes
    author\u id
    已经存储在
    Posts
    表中,但是我需要在使用触发器插入投票后向作者发送通知。您可以从
    帖子中选择
    作者id
    ,或者在触发器中的
    插入
    /
    更新
    语句中使用
    加入帖子。也许你在这个问题上问了一个新问题,因为它不在这里。