索引是帮助mysql快速获取数据的数据结构,索引的本质就是一种数据结构。
目的是提高查询效率,类比字典。
也可以理解为 排好序的快速查找数据结构
数据库系统除了存储数据之外,还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。例如下图就是一种可能的索引方式实例:
如果不加索引,Mysql在底层的执行过程其实是把每一行数据记录从磁盘读取到内存中,然后进行查询条件的比对,每一次读取数据都是一次磁盘IO。早期的Mysql索引还考虑过采用二叉树和红黑树的数据结构,首先根据sql查询条件去找索引树,找到一个节点之后就将存储的value值取出来,这个value值就是对应该数据在磁盘中的物理地址。查询索引的节点也相当于一次磁盘io。
如果选二叉树的数据结构会有一些缺点,就比如上图Col1字段,一直是一个自增的列,那这个时候索引的二叉树就会变为:
红黑树和二叉树相比较的话,那就是红黑树当一边的节点太多时,它会自动的进行一个树的旋转优化,红黑树也叫二叉平衡树