主键索引(PRIMARY KEY)

Exisi 2023-03-11 21:04:12
Categories: Tags:
  • 设定为主键约束(PRIMARY KEY)后,自动会为主键列创建主键索引,主键索引列值唯一非空。

示例

CREATE TABLE t_user(

id INT(10),

PRIMARY KEY(id),

 );

 

CREATE TABLE t_user(

id INT(10) PRIMARY KEY,

 );

 

Query OK, 0 rows affected (0.05 sec)

示例

ALTER TABLE  temp

ADD PRIMARY KEY(id);  

 

Query OK, 0 rows affected (0.15 sec)

Records: 0  Duplicates: 0  Warnings: 0

 

 

 

InnoDB 中的主键

  • InnoDB 表中主键是必须存在的

 

  • 对于InnoDB存储引擎的表,记录默认会按照一定的顺序保存,如果有明确定义的主键,则按照主键顺序保存。如果没有主键,但是有唯一索引,那么就是按照唯一索引的顺序保存。如果既没有主键又没有唯一索引,那么表中会自动生成一个内部列,按照这个列的顺序保存。
  • 建立主键索引的数据类型必须是有序的,若表的主键不是顺序的id,而是无规律数据,比如字符串,InnoDB无法加单的把一行记录插入到索引的最后,而是需要找一个合适的位置(已有数据的中间位置),甚至产生大量的页分裂并且移动大量数据,在寻找合适位置进行插入时,目标页可能不在内存中,这就导致了大量的随机IO操作,影响插入效率。除此之外,大量的页分裂会导致大量的内存碎片。

  • InnoDB表尽量自己指定主键,当表中同时有几个列都是唯一的,都可以作为主键时,要选择最常作为访问条件的列作为主键,提高查询的效率。

 

  • InnoDB 表的普通索引都会保存主键的键值,所以主键要尽可能选择较短的数据类型,可以有效地减少索引的磁盘占用,提高索引的缓存效果

 

 

 

MyISAM 中的主键

  • MyISAM 中允许没有主键的表存在