从数据结构的角度来看,常用的索引有哈希表、有序数组和搜索树。
哈希索引
通过Hash算法将数据库字段数据转换成定长的Hash值,与这条数据的行指针一并存入Hash表的对应位置;也就是说,哈希表是一种以键 – 值(key-value)存储数据的结构,每次输入待查找的key,就可以得到对应的值value,从而快速确定出要查找的数据。
通常数据库的哈希索引应对哈希冲突(多个不同的key映射到同一个value)的方法是拉链法,即以该value为首建立一个链表,将所有映射到该值的节点都以链表形式串联到后面,因此,如果哈希冲突过于频繁,会非常影响哈希索引的效率。在检索查询时,对待查询的关键字再次执行相同的Hash算法,得到Hash值,到对应Hash表对应位置取出数据即可,如果发生Hash碰撞,则需要在取值时进行筛选。
目前主流的使用哈希索引的引擎较少,主要是Memory。
有序数组
有序数组,顾名思义,就是按照某种顺序排序好的数组,因此它支持等值查询和范围查询。