理解MYSQL复合索引

时间:2016-10-07 16:31:20

标签: mysql

我一直在阅读一些代码并遇到UNIQUE KEY User_name (User_name,Email)

为什么在此复合索引中重复user_name?为什么不只是UNIQUE KEY (User_name,Email)

3 个答案:

答案 0 :(得分:2)

第一个User_name是密钥的名称,它不是指列。您可以根据需要为索引命名,例如:

UNIQUE KEY uniq_user_name_email (User_name, Email)

索引名称不是必需的,但是如果您必须稍后在此索引上运行命令,例如DROP INDEX uniq_user_name_email,则它非常有用。

以下是MySQL documentation的完整语法:

[CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type](index_col_name,...) [index_option]

答案 1 :(得分:2)

这被称为一个独特的索引。当两个字段一起考虑时,它们的值不能重复,但各个字段可能会重复。

例如,在用户名栏中可能有几个名为 Tim 的条目,在电子邮件字段中可能有几个名为tim@example.com的条目但是只有一个username=tim, email=tim@example.com

如果您希望用户名是唯一的(通常就是这种情况),您需要使该列独有(您也可以将其作为主键)。

答案 2 :(得分:1)

这是索引的名称。您可以根据需要更改名称。

如果您正在考虑索引的顺序,这很重要。

因此,两列索引的排序类似于电话目录的排序:首先按姓氏排序,然后按名字排序。这意味着两列索引不支持单独搜索第二列;这就像用名字搜索电话簿一样。