1.索引是干啥的?
相当于一本书的目录,根据目录中对应章节的页码就能找到相应章节。索引就是为了进行查找,提高找效率。
2.索引使用场景,付出的代价?
适用于需要经常查找但是不经常修改的场景。占用了更多的空间且拖慢了增删改的速度。
3.索引背后的数据结构?
多叉搜索树(B+树)
>
B-树:N个key值换分出N+1个区间,每个区间对应一颗子树。与二叉搜索树相比高度是少了但是每个节点比较次数多了,相比于比较次数来说,IO次数更是关键。
B+树:B+树也是一个N叉搜索树,每个节点都包含N个key值,每个节点又会分为N个区间。父亲节点中的值会作为子节点中的最大值(最小值),最下面的叶子结点就是用链表进行顺序连接。
特点:父节点的值都会在子节点中体现
非叶子节点的值都会在叶子节点中体现
最下面叶子节点使用链表进行按顺序连接
做为索引的优势:
整体IO次数少
所有查询最终都会落在叶子节点,查询IO次数都是差不多的因此查询素速度稳定
叶子结点用链表连接以后非常适合进行范围查找,例如找 >= 5 且 <= 11的值
所有数据的存储都是放在叶子节点上的,非叶结点只需要保存key值即可,非叶节点占用空间小甚至可以缓存到内存中,这时磁盘IO几乎就没了