【发布时间】:2020-02-03 11:09:49
【问题描述】:
我有一个 UserSkills 表,其中包含三列:id (PK)、userId (FK) 和 skillId (FK)。
我想对 userId 和 skillId 的组合实施复合唯一约束。为了更快地查找,我希望在 (userId, skillId) 上建立复合索引。
据我所知,MySQL 会自动索引唯一列。但是,到目前为止,我看到的所有示例和我自己的实现都涉及单列唯一约束。我想知道 MySQL 是否也索引复合唯一键。如果是,是否将其视为普通的多列索引?
对于普通的多列索引,根据MySQL参考手册:
如果表有一个多列索引,任何最左边的前缀 优化器可以使用索引来查找行。例如,如果 您在 (col1, col2, col3) 上有一个三列索引,您已编制索引 (col1)、(col1, col2) 和 (col1, col2, col3) 的搜索功能。
简而言之,我想知道是否应该在声明上述涉及它们的多列唯一约束之后创建一个 (userId, SkillId) 的多列索引,或者这只是多余的,因此不需要?
【问题讨论】:
-
只需在两个字段上添加唯一索引即可。 CREATE UNIQUE INDEX index_name ON table_name(index_column_1,index_column_2,...);
标签: mysql database unique-index