SQL索引
索引是什么
索引是帮助MySQL高效获取数据的排好序的数据结构
索引的数据结构
- 二叉树
- 红黑树
- hash 表
- b-树 ,B+树
关系红黑树是二叉树的升级版避免失去平衡 又称之为二叉平衡树.
B树死是红黑树的升级版 也可以称之为多杈平衡树
B+ 树是B-树改造而成的是MySQL索引数据结构
B+树特点: 缺点存在冗余 但是更节省资源 一层能存储更多的数据 两次O/I
根节点一般在内存当中
储存引擎
Innodb 存储引擎 (聚集索引)
Myisam (非 聚集索引)
主键
主键索引建立推荐 ** 整型, 自增**
整型
整型比较大小的时候快 占用空间小
与uuid(字符串)相比较 省磁盘省钱
自增
避免分裂效率高
hash 索引 比 B+树快 但是没办法进行范围查找
所以多数情况还是使用 B+树
B+树
B+树是B-树改造而成的将所有数据和磁盘地址全放在叶子节点上 ,并且叶子结点之间通过双向指针连接的多杈平衡树.
B+树特征
B+ 树是一种树数据结构,是一个n叉平衡树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。B+ 树通常用于数据库和操作系统的文件系统中。 B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。 B+ 树元素自底向上插入。
一个m阶的B树具有如下几个特征:
1.根结点至少有两个子女。
2.每个中间节点都至少包含ceil(m / 2)个孩子,最多有m个孩子。
3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m。
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
6 .B+树的叶子节点之间的箭头是双向的.。
通过上图可以看出如果在插入多个小于15的树很有可能导致中间节点的分裂 导致重新运算浪费资源 所以主键索引时 建议自增
回表
当查二级索引需要先从二级索引里查找到主键,在通过主键进行查询
索引覆盖
通过二级索引查找到的就是主键不需要回表
组合索引
当查询的sql语句中的条件都是其中某些列时 可以根据这些列表创建组合索引
索引下移
从存储引擎拉去数据的时候就直接根据多个条件所需的多个条件一起拉去
最左原则
在索引的时候没有前面没法比较大小 只是顺序错了 系统会帮助优化