elasticsearch为什么比mysql快

1,928 阅读1分钟

mysql关系型数据库索引原理

数据库的索引是B+tree结构

主键是聚合索引 其他索引是非聚合索引,先从非聚合索引找,见下图

image.png

elasticsearch倒排索引原理

image.png

两者对比

对于倒排索引,要分两种情况:

  1. 基于分词后的全文检索 这种情况是es的强项,而对于mysql关系型数据库而言完全是灾难

因为es分词后,每个字都可以利用FST高速找到倒排索引的位置,并迅速获取文档id列表

但是对于mysql检索中间的词只能全表扫(如果不是搜头几个字符)

  1. 精确检索 这种情况我想两种相差不大,有些情况下mysql的可能会更快些

如果mysql的非聚合索引用上了覆盖索引,无需回表,则速度可能更快

es还是通过FST找到倒排索引的位置并获取文档id列表,再根据文档id获取文档并根据相关度算分进行排序,但es还有个杀手锏,即天然的分布式使得在大数据量面前可以通过分片降低每个分片的检索规模,并且可以并行检索提升效率

用filter时更是可以直接跳过检索直接走缓存