何为倒排索引,要理解倒排索引的概念还要结合着正向索引一起理解,当我们深入了解mysql的索引之后,我们就对所谓正向索引有了一定了解,从宏观角度来看,mysql中正向索引是对每一行数据都加了一个类似目录的东西,我们通过目录索引找到符合条件的数据行,每一个索引对应一条数据,当然索引的具体实现与上文描述略有差异,此处先按下不讲。
正向索引结构如下
倒排索引最直观的感受就是对关键词搜索查询速度很快,索引的主体是关键词。
倒排索引结构如下
倒排索引同一字段索引的一个关键词下面有多个文档,一个文档也会对应多个关键词,多个不同关键词对应的文档中可能有相同的文档,正向索引同一个字段索引不同关键词对应的文档绝不相同, 正向索引主体是文档,文档是唯一的,索引是为了更方便快捷的访问文档。倒排索引主体为索引,索引是唯一的,文档让位于索引。正向索引的目的是为了文档遍历,倒排索引目的是为了文档的归类。
- 正向索引目的为了文档遍历。mysql的innodb搜索引擎支持btree索引,btree索引使用的就是所谓的正向索引,我们在使用mysql进行数据搜索时,我们可以通过索引定位到数据位置,并不需要遍历全部数据。但何为搜索,搜索即为将所有数据遍历一遍,拿出来符合条件的数据。btree索引构造的搜索树由于本身已有序,便不需要我们进行全部数据的遍历,但排序操作其实已经隐含了遍历操作,我们已经事先进行了遍历排序,使数据有序排列,实际搜索中便不再需要遍历所有数据。所以对于可以通过文档遍历来进行的操作都可以使用正向索引,如 排序,聚合操作,等值查询,范围查询。
- 倒排索引目的是文档归类。与正向索引不同,倒排索引是无序的,是将文档根据索引进行分类,此分类过程中也会将文档进行所谓的全部遍历,将包含对应关键词的文档归在一起,主体是关键词,查询也仅是针对关键词进行等值查询。
所以, 倒排索引仅适用于字符串的等值查询,正向索引可以做排序,聚合操作,等值查询,范围查询等操作,倒排索引仅关注等值查询,等值查询速度极快,正向索引兼任多种功能,等值查询速度略差与倒排索引。所以es中对于等值查询使用的是倒排索引,对于排序,聚合操作使用的是正向索引。
正向索引修百技,倒排索引精一技。 与人生何其相似矣



