主键的完整称呼是主键约束,是 MySQL 中使用最为频繁的约束。通常为了便于 DBMS 更快速地查找到表中的记录,都会在表中设置一个主键。MySQL 索引用来快速地寻找那些具有特定值的记录,如果没有索引,执行查询时 MySQL 必须从第一个记录开始扫描整个表中的所有记录,直至找到符合要求的记录。

两者区别

主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。

主键创建后一定包含一个唯一性索引,但唯一性索引并不一定是主键。

唯一性索引列允许空值,而主键列不允许为空值。

主键列在创建时已默认为非空值并加上唯一索引。

主键可被其他表引用为外键,唯一索引则不能。

一个表最多只能创建一个主键,但可以创建多个唯一索引。

主键和唯一索引都可由多列组成。

主键适合那些不容易更改的唯一标识,如自动递增列、身份证号等。

在 RBO 模式下,主键的执行计划优先级高于唯一索引。两者都可以提高查询的速度。

索引是一种特殊的文件,其中包含对数据表中所有记录的引用指针。

总体来说

主键相当于一本书的页码,索引相当于书的目录。

主键与索引本质上都属于键,区别在于主键是逻辑键,索引是物理键,也就是说主键并不实际存在,而索引实际存在于数据库中。主键一般都需要创建,主要用来避免一张表中出现重复记录;索引一般可以不建,但如果需要对该表进行查询操作,则建议创建,这样可以加快检索速度。