我想为名为“用户名”的列添加快速查找和唯一性的索引。我看到一个选项可以选择UNIQUE
或INDEX
。我应该创建两者,还是只使用 UNIQUE?
我没有使用用户名作为主键。
我想为名为“用户名”的列添加快速查找和唯一性的索引。我看到一个选项可以选择UNIQUE
或INDEX
。我应该创建两者,还是只使用 UNIQUE?
我没有使用用户名作为主键。
在 MySQL 中,每当你创建一个属性UNIQUE
时,它也会被INDEX
-ed 。一些数据库设计者也喜欢将UNIQUE
属性显式定义为INDEX
,但无论您选择什么,结果都是一样的。
UNIQUE
INDEX
为大多数数据库自动创建一个。因此,要回答您,您应该只创建一个,即UNIQUE
. 您可以在此处找到MySQL的相关线程
表上的主键也自动成为 mySql 中的索引。因此,如果您想让列成为索引和唯一键,则可以创建如下表:
CREATE TABLE `users` (
`username`,
PRIMARY KEY (`username`),
UNIQUE KEY `new_mmp_id` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
因此,最后,您在username
字段上拥有一个索引,该索引本身就是一个唯一字段。它也是主键,自动成为索引。您从未解释表中的特定字段,例如您是否需要自动增量 id 字段
Should I create both, or just go with UNIQUE?
如果你必须在列上有唯一的字段username
,那么你应该定义。创建两者,如果没有,则只需将用户名设置为作为索引的主键。
我建议你阅读这篇文章 http://www.xaprb.com/blog/2009/09/12/the-difference-between-a-unique-index-and-primary-key-in-mysql/
我的预感是UNIQUE
会给你最好的性能提升,但INDEX
也会给你一个提升。我认为您不想使用的唯一原因UNIQUE
是您不希望 MySQL 在您执行 anINSERT
或 an时处理检查唯一值UPDATE
。
我认为你不需要两者。但我不是专家。