gpt4 book ai didi

mysql - MySQL 中复合唯一键是否有索引?

转载 作者:行者123 更新时间:2023-12-02 19:41:34 24 4
gpt4 key购买 nike

我有一个 UserSkills 表,包含三列:id (PK)userId (FK)skillId (FK).

我想对 userIdskillId 的组合强制执行复合唯一约束。为了更快地查找,我希望在 (userId, SkillId) 上建立复合索引。

据我所知,MySQL 会自动为唯一列建立索引。但是,到目前为止我看到的所有示例和我自己的实现都涉及单列唯一约束。我想知道 MySQL 是否也索引复合唯一键。如果是,是否将其视为普通的多列索引?

对于普通的多列索引,根据MySQL引用手册:

If the table has a multiple-column index, any leftmost prefix of theindex can be used by the optimizer to look up rows. For example, ifyou have a three-column index on (col1, col2, col3), you have indexedsearch capabilities on (col1), (col1, col2), and (col1, col2, col3).

简而言之,我想知道在声明涉及它们的上述多列唯一约束后是否应该创建 (userId, SkillId) 的多列索引,或者这只是多余的,因此不需要?

最佳答案

因此,对于您的字段,id (PK)、userId (FK) 和 skillId (FK),mysql会自动在(id)(唯一)上创建索引,在(userId)(非唯一)上创建索引,在(skillId)<上创建索引(非唯一)。

您仍需要 (userId, SkillId) 上有一个额外的唯一索引

这可以替换 (userId) 上的非唯一索引,因为优化器可以在需要通过 查找时使用 (userId, SkillId) 索引>用户ID。但是,当 mysql 中的外键使用索引时,创建和删除索引可能会很麻烦,因此您可能只想添加复合唯一索引。

关于mysql - MySQL 中复合唯一键是否有索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com