mysql默认的存储引擎innodb采用的是B+树来存储索引。
那么为什么采用b+树而不采用二叉树,红黑树或者b树呢?
如果采用二叉树的话,比如采用二叉搜索树,如果这个树是相对平衡的话,那么这个查找的时间复杂度是O(logn),如果数据是有序的,那么这个二叉搜索树就会退化成链表,查找的时间复杂度为O(n),查找速率太慢,也就是说使用二叉搜索树这个查找的效率不稳定。
如果使用红黑树的话,数据规模比较小,就可以避免不平衡的问题,但是如果数据规模过于庞大,那么这个红黑树的深度就会很深,查找的效率也会变慢。
如果采用b树的话,因为b树的非叶子节点和叶子节点都会存放数据,那么查找一个数据的时候,会从根节点向下查找,其他数据也会被读取出来,这样磁盘的读写代价比较高,而b+树的只在叶子节点存放数据,非叶子节点存放指针,查找数据的话,这个磁盘的读写代价比较低。还有就是b+树的叶子节点之间通过双向指针进行维护,进行范围查询的话效率比较高。
综上来看,使用b+树存储索引最优。