悟空,拿我的打狗棒来

es的倒排索引和mysql二级索引区别?

Elasticsearch | 作者 laixiansheng | 发布于2020年07月18日 | 阅读数:3884

我理解es的倒排索引不就是跟mysql二级索引类似吗?都是通过某个field找到命中的id,然后回表fetch完整信息。。但是为什么说mysql不适合搜索呢?希望大佬能帮忙解惑以下。非常感谢
已邀请:

Charele - Cisco4321

赞同来自:

ES的借助了Lucene的分词查询功能,
并自己实现了分布式,故障冗余等功能。
 
与MySQL的应用场景不一样
 

pony_maggie - 公众号:犀牛饲养员的技术笔记

赞同来自:

底层存储结构不一样,ES牺牲了写入实时性,优化了存储结构更适合搜索的场景。mysql 是以 btree 排序的方式存储在磁盘上的。检索一个 field 需要几次 random access 的磁盘操作。
 
而 Lucene (ES的底层)在内存中缓存了树形结构的term index,可以更快速的进行检索。

zmc - ES PAAS、JuiceFS

赞同来自:

1.首先他们实现的大逻辑是一致的,都是通过某个数据结构实现快速检索
2.他们的目标场景是不一样的,mysql是针对结构化数据,索引也是为了快速的拿到那一行数据;ES是针对非结构化的数据,而且天生支持分布式;
3.底层数据结构不一致:mysql索引主要还是B+树,以及skiplist进行快速查询;ES则是通过FST,这个数据结构主要是为了压缩数据,能将结构放在内存,支持的是倒排索引结构巨大的场景;
4.个人理解真正mysql不适合做查搜索的原因:一个是mysql很难支持分布式,虽然有一些方式可以做到,但是问题依然很多,分布式对于搜索来说还是很重要的,因为并发大;一个是mysql不适合超大数据量;一个是mysql处理不了非结构化数据,比如要在一个文章中搜索关键词,如果强行要用mysql,那么就要手动在业务层分词过滤处理,变成有效的key存入mysql,或者直接用like....这两种方式的效率就不说了;

要回复问题请先登录注册