理解MYSQL复合索引

理解MYSQL复合索引,mysql,Mysql,我一直在阅读一些代码,遇到唯一关键用户名(用户名、电子邮件) 为什么在这个复合索引中重复用户名?为什么不仅仅是唯一密钥(用户名、电子邮件)?第一个用户名是密钥的名称,它不引用列。您可以随意命名索引,例如: UNIQUE KEY uniq_user_name_email (User_name, Email) 索引名不是必需的,但如果以后必须在此索引上运行命令,例如DROP index uniq\u user\u name\u email,则该名称非常有用 以下是中的完整语法: 第一个User\u

我一直在阅读一些代码,遇到
唯一关键用户名(用户名、电子邮件)


为什么在这个复合索引中重复用户名?为什么不仅仅是
唯一密钥(用户名、电子邮件)

第一个
用户名是密钥的名称,它不引用列。您可以随意命名索引,例如:

UNIQUE KEY uniq_user_name_email (User_name, Email)
索引名不是必需的,但如果以后必须在此索引上运行命令,例如
DROP index uniq\u user\u name\u email
,则该名称非常有用

以下是中的完整语法:


第一个
User\u name
是键的名称,它不引用列。您可以随意命名索引,例如:

UNIQUE KEY uniq_user_name_email (User_name, Email)
索引名不是必需的,但如果以后必须在此索引上运行命令,例如
DROP index uniq\u user\u name\u email
,则该名称非常有用

以下是中的完整语法:


这被称为共同唯一索引。当两个字段一起考虑时,它们的值不能重复,但单个字段可能重复

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


如果您希望用户名是唯一的(通常情况下),则需要使该列自身唯一(您也可以使其成为主键)。

这称为一个唯一索引。当两个字段一起考虑时,它们的值不能重复,但单个字段可能重复

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


如果您希望用户名是唯一的(通常情况下),则需要使该列本身是唯一的(您也可以使其成为主键)。

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

如果您考虑的是索引的顺序,那就很重要了


因此,两列索引的排序类似于电话簿的排序:首先按姓氏排序,然后按名字排序。这意味着两列索引不支持仅在第二列上搜索;这就像是按名字搜索电话簿。

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

如果您考虑的是索引的顺序,那就很重要了


因此,两列索引的排序类似于电话簿的排序:首先按姓氏排序,然后按名字排序。这意味着两列索引不支持仅在第二列上搜索;这就像是按名字搜索电话号码簿。

如果您不指定键名,则自动指定键名。另外,在“创建”(从剪切粘贴)过程中,请注意不要复制密钥名,因为这样会出错。如果不指定名称,则始终可以通过
show create table myTableName
show index from myTableName查看它们如果未指定键名,则自动指定。另外,在“创建”(从剪切粘贴)过程中,请注意不要复制密钥名,因为这样会出错。如果不指定名称,则始终可以通过
show create table myTableName
show index from myTableName查看它们