什么是索引
首先,我们经常会听到一个说法:怎么对mysql进行优化。十个里有九个半会说:加索引,索引优化啊。确实,对mysql进行优化,最有效、最能解决问题、最普遍的方式就是设计合适的索引,正确的索引能够将查询效率提升好几个数量级。为什么索引能够显著提升查询效率呢,我们从索引结构来一点点讨论。
索引是什么,从mysql官方文档来说:索引是帮助Mysql高效获取数据的排好序的数据结构!
这里有两个重点:排好序和数据结构,什么是数据结构:就像链表,数组,树形,图这样用来组织存储数据的方式。而Mysql索引用的是一种叫做B+树的数据结构来存储数据的,而且这样存储的数据是有序的。那又延伸出是B+树的概念了,为了理解这个,我们先弄清楚二叉树的概念
二叉树
有一张有两列col1、col2的表 t 如上图。为col2列建立索引,右边就是一个二叉树,它的特点是:
- 非叶子节点最多有两个子节点
- 节点右边的数据>=节点数据
- 节点左边的数据<节点数据
假设我现在要查找 col2=77 的数据,从根节点开始找,要查找3次,路径为34 --> 89 --> 77。如果数据总量为N,那么最多需要查找的次数为log2N。但是mysql