索引
什么是索引,书的目录我们都看过,该目录的作用就是帮住我们快速的找到我们所需要的内容,例如 我们要找到书中的标题的关键字,然后再通过页码就能快速定位到我们需要看的内容。其实我们数据库里面也是这样的原理。建立索引, 给数据排序,通过 ‘页码’,快速查询到我们需要的数据。
正向索引和倒排索引
正向索引
上面我们说的通过页码查询到自己想要的内容就是正向索引。
好处:
易于维护:新增的话直接跟在原来的后面,删除的话直接删除某一条即可
缺点:
查询时间长,有些场景查询效率比较低
倒排索引
通过你要查找的关键字作为索引, 在数据存入的时候,将存储内容进行算法处理,将内容中的关键词和出现的次数,进行分析,统计,存储。保存成一种特殊格式的数据结构。在全文检索的时候,能够提供快速查询的功能。
这里面我们举个简单的例子,查询 小米 NFC 手机 等关键字 相关的内容。
如果我们通过MySQL的 SQL语句查询,就会造成全表扫描,搜索效率比较低。如果使用左下方的数据结构是不是就能很快的找到我们所需要的数据了。
从上面的例子我们能够体会到倒排索引原理就是
倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
优点
检索的快速响应是一个最为关键的性能
缺点
倒排表的建立和维护都较为复杂(索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率)
后面我们继续写一下倒排索引的实现原理和数据结构。