索引一般有两种,一种是hash索引,另一种是b-tree索引。其中,b-tree索引用得比较普遍。而hash很少见到人用。
我们知道一种常见的查找数据结构二叉搜索树。但是为什么索引不采用二叉搜索树,而会选择b-tree树呢。
硬盘中的结点也是B-tree结构的。与内存相比,硬盘必须花成倍的时间来存取一个数据元素,这是因为硬盘的机械部件读写数据的速度远远赶不上纯电子媒体的内存。与一个结点两个分支的二元树相比,B-tree利用多个分支(称为子树)的结点,减少获取记录时所经历的结点数,从而达到节省存取时间的目的。
利用b-tree有多个分支的特点,查询时可以一次性加载多页进去,从而减少与硬盘交互的次数。
b-tree对以下查询有效:
全职匹配指的是和索引中的所有列进行匹配。属于精确查询。
like ‘is%’
between,左右比较的查询。
hash比较好理解,就是key-value,value存放数据存放的指针。hash索引比较适用于等值比较。不适合对数据进行排序查询。
上面的两个索引类型,在《Mysql高性能》中讲解得比较透彻。
高性能MySql第五章