Mysql主键索引与非主键索引
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主键索引与非主键索引相关推荐
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...
文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...
- mysql非主键索引_主键索引和非主键索引的区别
1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...
- mysql非主键索引_主键索引和非主键索引解析
1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...
- 数据库索引相关(主键索引和非主键索引区别)
索引基础 关于索引的知识可以看:SQL索引(INDEX). 简单概括就是:为数据库某些字段增加索引是可以加快查询速度的,并且一个表是可以创建多个索引的,而一个索引可以包含多个字段. 如果不使用索引,则 ...
- MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语
1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...
- Mysql主键索引与非主键索引区别
什么是索引 MySql官方索引的定义:索引(Index)是帮助MySql高效获取数据的数据结构,索引的目的在于提高查询效率,类比字典:实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录 ...
- 主码索引、聚集索引、非主码索引(辅助索引)、唯一索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引、普通索引等...
强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其 ...
- mysql 行自动增量为23,Mysql Innodb:自动增量非主键
是否可以自动递增非主键? 表"book_comments" book_id medium_int timestamp medium_int user_id medium_int v ...
- 【mysql】聚簇索引(聚集索引)和非聚簇索引(二级索引、辅助索引)的区别
文章目录 总结 1. 聚簇索引 一个坑 2. 非聚簇索引 3. 二级索引 总结 聚簇索引也叫聚集索引.,并不是一种单独的索引类型,而是一种数据存储方式.那么可以理解聚簇索引是一种抽象概念,在具体实现的 ...
最新文章
- linux usb驱动
- EMF+GEF的属性页问题
- OpenStack 之Nova添加扩展API流程,附带资源的查找功能
- 【转】!Dynamics 365 Online通过OAuth 2 Client Credential授权(Server-to-Server Authentication)后调用Web API
- C语言以二进制形式读入文件
- 【Contact】结构体+动态内存管理+文件存储实现简易通讯录代码
- 数据结构计算机专业教学计划编制,[实验报告]教学计划编制问题
- (jdbc和cmd)sqlite数据迁入mysql(导入导出)
- python按钮代码_Python QPalette.Button方法代码示例
- CSS基础part1
- c++函数如何返回一个vector_如何将Python的一个函数进行超时限制
- python人口普查数据数据分析_2010年第六次人口普查数据分析
- 计算机cad标题栏快捷键,AutoCAD快捷键和工具栏及菜单栏大集合
- tp-link与台式计算机连接教程,【详细图解】TP-Link TL-WDR6510路由器电脑设置教程...
- schmidt正交化
- 智慧班级管理系统 java
- my ReadBook_guanlixinxixitong / 02382 / MIS / mis / 20130112 PM
- 微信支付当前url未注册问题
- matlab 秒数转换时分秒,将秒转换为天时分秒格式字符串(如是0天0时0分就显示秒)...
- mac关闭php,mac强制退出程序的方法有哪些