Mysql主键索引与非主键索引

  • 前言
  • InnoDB引擎
    • 主键索引:
    • 非主键索引
  • MySIAM引擎
    • 主键索引
    • 非主键索引
  • InnoDB和MyISAM的区别

前言

什么是B树:

B树也叫B-树,是一棵多路平衡查找树,平衡的意思是左边和右边分布均匀。多路的意思是性对于二叉树而言,B树有多条路,及父节点有多个子节点。

优点:B树因为是多路,多以层数少,可以更快的找到信息。Mysql中的数据一般是放在磁盘中的,B树可以减少对磁盘的I/O操作。

什么是B+树:
B+树是B树的变形。

B+树与B树的区别:
B树的每个节点都存储了key和value,B+树只有所有的数据存储在叶子节点上,其余节点不存储数据,这样的话节点就可以存储更多的key,可以使得树更矮,I/O次数更少。
B+树的所有叶节点构成一个双向有序链表,可以按照排序的次序遍历所有记录,便于区间查找和搜索。B树种相邻的元素可能在内存中不相邻。


InnoDB和MyISAM是Mysql中常用的两种引擎,都是用B+树存储索引。
下面根据这两种不同的引擎了解Mysql的主键索引和非主键索引。

InnoDB引擎

InnoDB表数据文件本身就是一个索引结构,树的叶节点data域保存了完整的数据结构,这种索引叫做聚集索引

主键索引:

对于下面这一张表

id title author
5 西游记 吴承恩
8 三国演义 罗贯中
10 水浒传 施耐庵
12 红楼梦 曹雪芹

其中id是主键


叶子节点记录的是整行的值

非主键索引

在之前的表上加上一列k,作为非主键索引

id title author K
5 西游记 吴承恩 10
8 三国演义 罗贯中 11
10 水浒传 施耐庵 15
12 红楼梦 曹雪芹 20


非主键索引的叶子节点保存了主键的值,非主键索引也叫做二级索引。
在用非主键索引查询时,先会查询出主键的值,在在主键索引的表中查询,这个过程也叫做回表

MySIAM引擎

MySIAM引擎B+树的叶节点的data域存放的是数据记录的地址,这种索引方式也叫非聚集的。

主键索引

对于InnoDB主键索引的那个表:

非主键索引

对于InnoDB中非主键索引的那张表:

在MySIAM中,主键索引和非主键索引在结构上没有任何区别,只是主键索引要求key是唯一的,非主键索引的key可以重复。

InnoDB和MyISAM的区别

  • InnoDB支持事务,MySIAM不支持事务
  • InnoDB支持主键,MySIAM不支持主键
  • InnoDB是聚集索引,使用B+树作为索引结构,数据文件和索引绑在一起,必须有主键;MyISAM是非聚集索引,使用B+树作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针
  • InnoDB不保存表的具体行数,MyISAM用一个变量保存了整个表的行数
  • InnoDB支持表锁,行锁,MyISAM只支持表锁
  • InnoDB必须有唯一索引(主键),如果没有指定的话InnoDB会自己生成一个隐藏列Row_id充当默认主键,MyISAM没有

Mysql主键索引与非主键索引相关推荐

  1. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  2. mysql非主键索引_主键索引和非主键索引的区别

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

  3. mysql非主键索引_主键索引和非主键索引解析

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

  4. 数据库索引相关(主键索引和非主键索引区别)

    索引基础 关于索引的知识可以看:SQL索引(INDEX). 简单概括就是:为数据库某些字段增加索引是可以加快查询速度的,并且一个表是可以创建多个索引的,而一个索引可以包含多个字段. 如果不使用索引,则 ...

  5. MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语

    1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...

  6. Mysql主键索引与非主键索引区别

    什么是索引 MySql官方索引的定义:索引(Index)是帮助MySql高效获取数据的数据结构,索引的目的在于提高查询效率,类比字典:实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录 ...

  7. 主码索引、聚集索引、非主码索引(辅助索引)、唯一索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引、普通索引等...

    强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其 ...

  8. mysql 行自动增量为23,Mysql Innodb:自动增量非主键

    是否可以自动递增非主键? 表"book_comments" book_id medium_int timestamp medium_int user_id medium_int v ...

  9. 【mysql】聚簇索引(聚集索引)和非聚簇索引(二级索引、辅助索引)的区别

    文章目录 总结 1. 聚簇索引 一个坑 2. 非聚簇索引 3. 二级索引 总结 聚簇索引也叫聚集索引.,并不是一种单独的索引类型,而是一种数据存储方式.那么可以理解聚簇索引是一种抽象概念,在具体实现的 ...

最新文章

  1. linux usb驱动
  2. EMF+GEF的属性页问题
  3. OpenStack 之Nova添加扩展API流程,附带资源的查找功能
  4. 【转】!Dynamics 365 Online通过OAuth 2 Client Credential授权(Server-to-Server Authentication)后调用Web API
  5. C语言以二进制形式读入文件
  6. 【Contact】结构体+动态内存管理+文件存储实现简易通讯录代码
  7. 数据结构计算机专业教学计划编制,[实验报告]教学计划编制问题
  8. (jdbc和cmd)sqlite数据迁入mysql(导入导出)
  9. python按钮代码_Python QPalette.Button方法代码示例
  10. CSS基础part1
  11. c++函数如何返回一个vector_如何将Python的一个函数进行超时限制
  12. python人口普查数据数据分析_2010年第六次人口普查数据分析
  13. 计算机cad标题栏快捷键,AutoCAD快捷键和工具栏及菜单栏大集合
  14. tp-link与台式计算机连接教程,【详细图解】TP-Link TL-WDR6510路由器电脑设置教程...
  15. schmidt正交化
  16. 智慧班级管理系统 java
  17. my ReadBook_guanlixinxixitong / 02382 / MIS / mis / 20130112 PM
  18. 微信支付当前url未注册问题
  19. matlab 秒数转换时分秒,将秒转换为天时分秒格式字符串(如是0天0时0分就显示秒)...
  20. mac关闭php,mac强制退出程序的方法有哪些

热门文章

  1. popState 监听浏览器切换路由
  2. 交叉熵、相对熵(KL散度)、JS散度和Wasserstein距离(推土机距离)
  3. 体验版微信小程序为什么不能登录
  4. 【Informatica PWC】如何利用copybook导入cobol,vsam文件
  5. 常见搭配重型货架使用的配件
  6. 网络基础扫盲 | 数据传输方式和交换方式
  7. 嵌入式软件基本开发需要掌握的基础知识
  8. [PCB]详细介绍如何使用拼板矩阵拼板
  9. SecureCRT使用之自动记录日志功能
  10. easyUI tree 异步加载数据