- 索引概念
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.
可以得到索引的本质:索引是数据结构,也可简单理解为"排好序的快速查找数据结构" - 数据结构
Hash表 二叉树 红黑树 B树
Hash表:有数据存进来的时候,按照特定规则得出这个数据在数组中的位置,将数据存进这个位置,我们就以存进一个整型数据为例,特定规则就是取余(通过一个固定的哈希函数转换成一个整型数据,然后就将该数字对数组长度取余,取余结果就当做数组的下标,将value存储在以该数字为下标的数组空间里.) - 红黑树
二叉树特性:
左子树所有节点的值小于或等于他的根节点上的值
右子树所有节点的值大于或等于他的根节点上的值
左右子树也一定分别为二叉排序树
红黑树就是一种平衡的二叉查找树它具有的特性 :
节点是红色或黑色
根节点是黑色
每个叶子的节点都是黑色的空节点(NULL)
每个红色节点的两个节点都是黑色的
从任意节点到其每个叶子的所有路径都包含相同的黑色节点
B-Tree
从图中可以看出子节点有相同的深度,并且子节点指针为空
节点中的数据索引从左到右是递增的顺序 - B+Tree
从图中可以看出父节点中不存储数据,这样就可以放更多的索引,
叶子节点中包含所有的索引字段,
叶子节点使用指针连接 方式提高访问性能 - 搜索引擎
//可以通过sql语句查看索引
SHOW ENGINES;
MySQL中常见的引擎之MyISAM
data存的是数据地址.索引是索引,数据是数据.索引放在XX.MYI文件中,数据放在XX.MYD文件中,所以也叫非聚集索引
MySQL中常见的引擎之InnoDB
data存的是数据本身.索引也是数据.数据和索引存在一个XX.IDB文件中,所以也叫聚集索引
InnoDB表中是必须建立主键的,如果你的表中没有,mysql就会帮你建立虚拟主键,这个主键需要设自增,就是为了保持一致性和节省存储空间
两种引擎区别
1. MyISAM 是非事务安全的,而InnoDB是事务安全的
2. MyISAM 锁的粒度是表级别的,而InnoDB支持行级锁
3. MyISAM支持全文类型索引,而InnoDB不支持全文索引
4. MyISAM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyISAM
5. MyISAM表保存成文件形式,跨平台使用更加方便
6. MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果在应用中执行大量select操作可选择
7. InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,可选择