Mysql流程:
不同的存储引擎,数据文件和索引文件存放的位置是不同的,因此有了分类
聚簇索引:
1、数据和文件放在一起innodb
2、mysql/data/ 文件路径下存在两种后缀
.frm:存放的是表结构
.ibd:存放数据文件和索引文件
注意:mysql的innodb存储引擎默认情况下会把所有的数据文件放到表空间中,不会为每一个单独的表保存一份数据文件,如果需要将每一个表单独使用文件保存,设置
set global innodb_file_per_table=on;
非聚簇索引:
1、数据和索引单独一个文件:MyISAM
.frm:存放表结构
.MYI:存放索引数据
.MYD:存放实际数据
索引是什么:
hash表:
哈希表可以完成索引的存储,每次在添加索引的时候需要执行列的hash值,取模运算后计算出下标,将元素插入下标位置即可
使用场景:
等值查询
表中的数据是无序数据(范围查找的时候比较浪费时间,需要挨个遍历操作)
hash表在使用的时候需要将全部的数据加载到内存,比较浪费内存空间,也不是很合适
数:
在树的结构中,左子树必须小于根节点,右子树必须大于根节点,如果是多叉树的话,从左到右是有序的
多叉树:在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树。
二叉树:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。
AVL树:一个严格意义上的平衡树,最高子树和最低子树高度之差不能超过1因此在插入的时候会进行1到N次的旋转,严重影响插入的性能
红黑树:红黑树是AVL树的一个升级,损失了部分的性能来提升插入的性能,在红黑树中最低子树跟最高子树之差小于2被即可,在插入的时候,不需要进行N多次的旋转操作,而且还加入了变色的特性,来满足插入和查询的平衡
二叉树及其N多变种都不能支撑索引,原因是输的深度无法控制或者插入数据的性能比较低
B树:
缺点:
1、每个节点都有key,同时包含data,而每页存储空间有限,如果data比较大的话会导致每个节点存储的key数量变小
2、当存储的数据很大的时候会导致深度较大,增大查询时IO次数,进而影响查询性能
B+树:
在B树上进行改进,将数据都放到第三层里检索
索引的分类
主键索引:
主键索引是一种唯一索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键
唯一索引:
索引列的所有值都只能出现一次,即必须唯一,值可以为空
普通索引:
基本的索引类型,值可以为空,没有唯一性的限制(覆盖索引)
全文索引:
MyISAM支持,Innodb在5.6之后支持
检索某些对应关键字
组合索引:
多列值组合成一个索引,专门用于组合搜索(最左匹配原则)