Mysql 读/写速度是否取决于索引?
我有一个名为“投票”的表。现在我在它的一些列上有一些FK(外键)。正如您所知,我需要在FK列上创建一个索引。如果我在列上创建索引(例如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)的唯一索引来检测重复
用户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 Yesauthor\u id
已经存储在Posts
表中,但是我需要在使用触发器插入投票后向作者发送通知。您可以从帖子中选择作者id
,或者在触发器中的插入/更新语句中使用加入帖子。也许你在这个问题上问了一个新问题,因为它不在这里。顺便说一句:author\u id
seams是多余的。我猜它已经存储在Posts
表中。@PaulSpiegel Yesauthor\u id
已经存储在Posts
表中,但是我需要在使用触发器插入投票后向作者发送通知。您可以从帖子中选择作者id
,或者在触发器中的插入/更新语句中使用加入帖子。也许你在这个问题上问了一个新问题,因为它不在这里。