1、首先思考,mysql中索引采用的是什么?B树还是B+树?为什么?
B树和B+树都是多叉树,区别在于B+树的数据全存在于叶子节点,而B树非叶子节点也会存储数据。
MYSQL采用的是B+树,因为B树非叶子节点也会存储数据,所以会有数据回旋查找的问题。
两者的相同点:一个节点可以存储多个值。
2、HASH索引
hash值是无序的不能进行范围查找。如果值不一样但是hash值是一样的,这样就需要一个一个的去匹配会很慢
3、平衡二叉树
两个树杈子分为(左子树、右子树)它的绝对值不会大于1,随着数据量的增加,二叉树越高速度越慢
4、B树
一个节点可以有多个值,类似于目录,B树也存在回旋查找的问题
5、B+树
由非叶子节点和叶子节点组成,非叶子节点存储的key,叶子节点既存key也存value,通过单项链表去解决回旋查找的问题,范围查找很高(因为内部在插入的时候索引就是有序的)
6、索引动态插入过程以及查找过程的动态图演示过程
Hash索引:Closed Hashing Visualization
https://www.cs.usfca.edu/~galles/visualization/ClosedHash.html
平衡二叉树:AVL Tree Visualzation
https://www.cs.usfca.edu/~galles/visualization/AVLtree.html
B树:B-Tree Visualization
https://www.cs.usfca.edu/~galles/visualization/BTree.html
B+树:B+ Tree Visualization
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html