【问题标题】:MySQL UNIQUE and INDEX use on ColumnMySQL UNIQUE 和 INDEX 在列上的使用
【发布时间】:2012-07-06 10:28:27
【问题描述】:

我想为名为“用户名”的列添加快速查找和唯一性的索引。我看到一个选项可以选择UNIQUEINDEX。我应该同时创建,还是只使用 UNIQUE?

我没有使用用户名作为主键。

【问题讨论】:

  • 我会假设 UNIQUE 不会像 INDEX 那样创建索引来进行快速查找。
  • 你会错误地假设。

标签: mysql indexing unique-index


【解决方案1】:

表上的主键也自动成为 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/

What are differences between Index v.s. Key in MySQL

【讨论】:

  • 您正在向他解释 UNIQUE 的作用,而对索引没有任何作用(在您编辑之前)。 OP正在询问在他的情况下选择哪个您可以回答。此外,即使在编辑之后,我觉得一个谈论索引和键之间差异的链接也不是一个正确的答案。
  • 另外我相信如果你将一个属性设为PRIMARY KEY,默认情况下它就是UNIQUE
  • 我通常使用 UNIQUE 键以便在表上也有一个自动增量 ID 字段。这意味着 ID 字段是主键,但用户名字段也是唯一的,因此其他行不能有现有 id 字段和用户名字段的组合
  • 谁说我使用用户名作为主键?
【解决方案2】:

我的预感是UNIQUE 会给你带来最好的性能提升,但INDEX 也会给你带来提升。我认为您不想使用UNIQUE 的唯一原因是您不希望 MySQL 在您执行INSERTUPDATE 时处理检查唯一值。

我认为你不需要两者。但我不是专家。

【讨论】:

    【解决方案3】:

    在后台的 MySQL 中,每当您创建属性 UNIQUE 时,它也将是 INDEX-ed。一些数据库设计人员喜欢将UNIQUE 属性也明确定义为INDEX,但无论您选择什么,结果都是一样的。

    【讨论】:

    • 独一无二的两者兼而有之,但索引不会使其独一无二。所以两个结果都不一样。
    • 是的,你是对的,但他问对于一个独特的元素最好的做法是什么,所以我认为你需要使用UNIQUE,但如果他想添加INDEX是他的选择。我会改写我的答案以更清楚...... tnx
    【解决方案4】:

    UNIQUE 会自动为大多数数据库创建一个INDEX。所以要回答你,你应该只创建一个,即UNIQUE。你可以为 MySQL 找到一个相关的线程here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-14
      • 2011-04-20
      • 2023-03-16
      • 2013-01-14
      • 2010-10-17
      • 2016-08-11
      相关资源
      最近更新 更多