04.深入浅出索引(上)
简单来说,索引的出现就是为了提高数据查询效率,就像书的目录一样。 索引的常见模型 索引实现的方式有很多种,所以这里就引入了索引模型的概念,可以用于提高读写效率的数据结构很多,比较常见的数据结果有以下三种:哈希表、有序数组和搜索树。 哈希表是一种以键值存储数据的结构,我们只要输入待查找的值即key,就可以找到对应的值即Value。哈希的思路很简单,把值放到一个数据里,用一个哈希函数把Key换算成一个确定的位置,然后把value放在数组的这个位置上。不可避免的,多个key通过哈希函数的换算,会出现同一个值的情况,处理这种情况的方法是,拉出一个链表。所以哈希表这种结构适用于只有等值查询的场景。 有序数据在等值查询和范围查询场景中的性能就都非常优秀,但是在需要更新数据的时候就麻烦了,你往中间插入一条记录,就必须行挪动后面所有的记录,成本太高。 二叉搜索树:每个节点的左儿子小于父节点,父节点又小于右儿子,查询的时间复杂度为O(log(N)),数据库存储大多不使用二叉树,因为树高过高。一般使用N叉树。 InnoDB的索引模型 在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表,又因为InnoDB使用了B+树索引模型,所以数据都是存储在B+树中。每一个索引在InnoDB里面对应一棵B+树。(为什么InnoDB选择B+树,因为B+树能够很好地配合磁盘的读写特性