MySQL中密钥,主键,唯一密钥和索引的区别

时间:2010-10-02 08:05:07

标签: mysql indexing primary-key unique-key sqlperformance

我应该何时使用KEYPRIMARY KEYUNIQUE KEYINDEX

8 个答案:

答案 0 :(得分:279)

KEYINDEX是MySQL中的同义词。他们的意思是一样的。在数据库中,您可以使用indexes来提高数据检索的速度。通常会在JOINWHEREORDER BY子句中使用的列上创建索引。

想象一下,您有一个名为users的表,并且您想要搜索姓氏为“Smith”的所有用户。如果没有索引,数据库必须遍历表的所有记录:这很慢,因为数据库中的记录越多,查找结果所需的工作就越多。另一方面,索引将帮助数据库快速跳到持有“史密斯”记录的相关页面。这非常类似于我们人类通过电话簿目录查找姓名的人:我们不会从头到尾搜索目录,只要我们按照某种顺序插入信息即可用于快速跳到'S'页面。

主键和唯一键类似。主键是可以唯一标识行的列或列的组合。这是unique key的一个特例。一个表最多只能有一个主键,但不止一个唯一键。在列上指定唯一键时,表中没有两个不同的行可以具有相同的值。

另请注意,定义为主键或唯一键的列会在MySQL中自动编入索引。

答案 1 :(得分:52)

KEY和INDEX是同义词。

当性能测量和EXPLAIN显示由于缺少索引而导致查询效率低下时,您应该添加索引。添加索引可以提高查询的性能(但它可以减慢对表的修改)。

如果要将该列(或列)中的值限制为唯一,则应使用UNIQUE,以便尝试插入重复值会导致错误。

PRIMARY KEY既是一个唯一约束,也暗示该列是非NULL。它用于为每行提供标识。这对于通过外键约束与另一个表连接非常有用。虽然表不需要PRIMARY KEY,但通常是个好主意。

答案 2 :(得分:41)

主键不允许NULL值,但唯一键允许NULL值。

我们可以在表格中声明仅一个 主键,但表格可以包含多个 唯一键 (列分配)。

答案 3 :(得分:16)

PRIMARY KEYUNIQUE KEY相似,只是它具有不同的功能。主键使表行唯一(即,不能有2行具有完全相同的键)。您只能在数据库表中拥有1个主键。

唯一键使表格行中的表格列唯一(即,没有2个表格行可能具有相同的确切值)。您可以拥有多个唯一的密钥表列(与主键不同,这意味着表中只有1个表列是唯一的。)

INDEX也创造了独特性。 MySQL(示例)将为索引的列创建索引表。这样,在该索引表列上查询查询时,更容易检索表行值。缺点是如果你做了很多更新/删除/创建,MySQL必须管理索引表(这可能是性能瓶颈)。

希望这有帮助。

答案 4 :(得分:10)

唯一键:没有两行相似的列

主键:可以唯一标识表中每一行的最小列数的集合(即,在构成主键的所有列中没有两行相似)。表中可以有多个主键。如果存在唯一键,那么它是表中的主键(不是“主键”)。如果不存在唯一键,那么将需要多个列值来标识像(first_name,last_name,father_name,mother_name)这样的行可以在某些表中构成主键。

索引:用于优化查询。如果您要根据某些列多次搜索或排序结果(例如,大多数人将按名称搜索学生,而不是按照他们的滚动编号搜索),那么如果列值全部是“索引“例如使用二叉树算法。

答案 5 :(得分:7)

主键 - 我们只能将表中的一个主键放入表中,当我们将值输入表中时,我们不能将该列留空。

唯一键 - 我们可以在表格中放置多个唯一键,当我们将值输入表格时,我们可能会将该列留空。     当我们应用primary& amp时,列会获取唯一值(不相同)独特的关键。

答案 6 :(得分:5)

主键用于处理不同的表。这是关系数据库的基础。如果您有一个图书数据库,最好创建2个表 - 1)书籍和2)具有INT主键“id”的作者。然后你在书中使用id而不是作者名。

如果您不想重复输入,则使用唯一键。例如,您可能在书籍表中有标题,并且希望确保每个标题只有一个条目。

答案 7 :(得分:2)

唯一键:

  1. 多个值可以为空。
  2. 没有两个元组在唯一键中具有相同的值。
  3. 可以组合一个或多个唯一键以形成主键,但反之亦然。
  4. 主键

    1. 可以包含多个唯一键。
    2. 唯一代表元组。
相关问题