- B+树索引
- 自适应哈希索引
- 全文检索
所有记录按键值的大小顺序存到B+树的叶子节点,叶子节点构成一个双向链表。B+树的查找次数和高度有关,B+树索引的高度一般在2—4层。
B+树索引分为聚集索引和辅助索引。区别是叶子节点是否包括一整行的信息。
聚集索引:按照每张表的主键,构造B+树,叶子节点称为数据页。
每张表只能有一个聚集索引。
聚集索引是逻辑连续的,数据页通过双向链表连接,所以物理存储可以不连续。
对于主键的排序查找和范围查找非常快。
辅助索引:叶子节点不包含行记录的全部数据,叶子节点的索引行包含了一个书签,书签指向了与索引对应的行
数据。
书签就是行数据的聚集索引。
每个表可以有多个辅助索引。
二、自适应哈希索引
哈希算法复杂度为O(1)。自适应哈希索引是以哈希表的方式实现。冲突机制采用链表方式。
当建立哈希索引会提高查找速度时会自动建立哈希索引,自适应哈希索引通过哈希函数映射到哈希表中,对于等值查找很快,不能范围查找。
三、全文检索
全文检索的实现方式是倒排索引。倒排索引是在辅助表中存储了单词和单词所在文档位置的映射,通过关联数组实现,两种方式:
- inverted file index,(word, document Id),例如,(code, (1,4)),表示单词code在文档1和文档4中。
- full inverted index, (word,(document Id,position)),例如,(code, ( (1:6),(4:20) )),表示单词code 在文档1的第六个位置,文档4的第20个位置。
全文检索索引缓存,红黑树实现,根据(word,ilist)排序。插入数据时会批量对辅助表进行更新,查询时,辅助表会将缓存中的word字段合并到辅助表再进行查询,数据库关闭时,缓存中的数据库会同步到辅助表。
每张表只能有一个全文检索索引。由多列组合而成的索引列必须使用相同的字符集和排序规则。不支持没有单词界定符的语言。