1、主键和唯一索引的区别

  1.1 主键一定时唯一性索引,唯一性索引并不一定是主键
  1.2 一个表中可以有多个唯一性索引,但只能有一个主键
  1.3 主键不允许有空值,而唯一索引允许有空值
  1.4 主键可以被其他字段作外键引用,而唯一性索引不能

2、主键 和 唯一索引 谁更快

  InnoDB使用B+树作为索引结构。在B+树中,将节点分为叶子结点非叶子节点,非叶子节点上保存的是索引,而且一个节点可以保存多个索引,数据全部存于叶子节点上,根据叶子节点的内容不同,InnoDB索引分为主键索引非主键索引

例如对于下面这个表,且ID是主键

主键索引和非主键索引的示意图如下:

其中 R 代表一整行的值
  非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也成为聚簇索引

根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。

1、如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID 这棵 B+树。

2、如果查询语句是 select * from table where k = 1,即非主键的查询方式,则先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程也被称为回表。

也就是说,非主键索引查询会比主键查询多搜索一棵树。

3、为什么建议使用主键自增的索引?

这是一颗主键索引的树

如果我们插入 ID = 650 的一行数据,那么直接在最右边插入就可以了

   但是如果插入的是 ID = 350 的一行数据,由于 B+ 树是有序的,为了维持树的有序性,叶子节点将会进行挪动,此时,如果在已经存储满状态的数据页中插入节点,将会申请新的数据页,将部分数据挪动到新的数据页,这个过程称为页分裂
  页分裂除了会影响性能,还会降低磁盘空间的利用率。不规则数据插入时,会造成频繁的页分裂。

整理不易,你的点赞、关注是对我最大的鼓励

深入理解 MySQL 主键和唯一(unique)索引相关推荐

  1. mysql主键和唯一索引_主键和唯一索引的有什么区别

    主键和唯一索引的区别 -- 区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值 ...

  2. mysql主键和唯一索引_mysql 主键和唯一索引的区别

    主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值. 主键列在创建时,已经默认为非空 ...

  3. mysql 主键和唯一索引的区别

    主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值. 主键列在创建时,已经默认为非空 ...

  4. mysql主键创建非聚集索引_什么是聚集索引,非聚集索引,索引覆盖,回表,索引下推...

    聚集索引 我们先建如下的一张表 CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` var ...

  5. mysql主键索引需要创建_mysql主键还需要建立索引吗?

    mysql主键不需要建立索引,主键具备索引的功能:当创建或设置主键的时候,mysql会自动添加一个与主键对应的唯一索引,不需要再做额外的添加.数据库管理系统对于主键会自动生成唯一索引,所以主键是一个特 ...

  6. MySQL主键的理解

    MySQL主键的理解 主键(primary key )没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为"PRIMARY KEY",主键不能重复,一个表只能 ...

  7. mysql 主键理解_MySQL主键的理解

    MySQL主键的理解 主键(primary key)没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为"PRIMARY KEY",主键不能重复,一个表只能有 ...

  8. MySQL 之 约束 (主键、唯一、非空、自增、外键)

    MySQL 之 约束 (主键.唯一.非空.自增.外键) 目的:使得数据更准确,更完整. 约束的分类: 1.键约束 (1)主键约束 (2)唯一键约束 (3)外键约束 2.非空约束 3.默认值约束 4.自 ...

  9. MySQL主键索引和唯一索引区别

    MySQL主键索引和唯一索引区别 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结 ...

  10. mysql唯一索引和联合索引的区别_mysql中,索引,主键,唯一索引,联合索引的区别...

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度. ...

最新文章

  1. Objective C 中的nil,Nil,NULL和NSNull理解
  2. lhgdialog 4.2.0 正式版发布
  3. (二)spring cloud微服务分布式云架构-整合企业架构的技术点
  4. Everything(速度快的文件搜索软件) 1.4.1.801b 汉化绿色版
  5. Silverlight Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)
  6. Mac022-brew安装tool
  7. dump mysql database,Mysql Database 逻辑备份: mysqldump
  8. 中国临床数据分析市场趋势报告、技术动态创新及市场预测
  9. 分支 getchar和putchar
  10. (转)深入理解Java的接口和抽象类
  11. ajax离开页面方法,jQuery中ajax调用当前页面方法
  12. Android IPC(一)跨进程通讯的几种方式、作用
  13. Memcached内存分配机制
  14. GB28181的协议详解
  15. maplab(2):ROVIOLI简介
  16. php定做单城市公交路线查询系统
  17. Angular 三目运算符
  18. Adaptive AUTOSAR 简介 (2021版)
  19. 3、NC系统接口集(持续更新)
  20. 修改远程桌面3389端口

热门文章

  1. Bash玩转脚本3之几个指令有趣的筛选京东评价
  2. 生先森依旧怀抱初心,满载爱意
  3. 国王匿名信息服务器,扮国王还是卫兵? 角色扮演服务器登录美服
  4. ReversingWithLena——01. Olly + assembler + patching a basic reverseme
  5. 城市引力模型——城市经济联系度制作
  6. Flink Back Pressure(背压)实现与监控
  7. 全局序列比对 c语言实现,序列比对(一)——全局比对Needleman-Wunsch算法
  8. 2020大疆数字IC校招笔试题(3)——CMOS 反相器【CMOS逻辑】【MOS管】【PMOS】【NMOS】
  9. DNW的详细配置及使用过程
  10. 经验分享:利用树莓派开发板制作无线路由器