一、正向索引和倒排索引
概念
- 正向索引是最传统的,根据id索引的方式。但根据词条去查询时,必须先逐个获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程,Mysql采用的就是正向索引。
- 倒排索引则相反,先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程,Elasticsearch就是基于倒排索引实现的。
优缺点
| 正向索引 | 倒排索引 | ||
|---|---|---|---|
| 优点 | 缺点 | 优点 | 缺点 |
| 可以给多个字段创建索引 | 根据非索引字段,或者索引字段中的部分词条查找时,智能全表扫描 | 根据词条搜索、模糊搜索时,速度非常快 | 只能给词条创建索引,而不是字段 |
| 根据索引字段搜索、排序速度非常快 | 无法根据字段做排序 |
二、Elasticsearch与MySQL基础概念
mysql与elasticsearch的概念对比:
| MySQL | Elasticsearch | 说明 |
|---|---|---|
| Table | Index | 索引(index),就是文档的集合,类似数据库的表(table) |
| Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |
| Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
| Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似于数据库的表结构(Schema) |
| SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |
总得来说,两者都有自己的擅长之处。
- Mysql:擅长事务类型操作,可以确保数据的安全和一致性。适合于需要严格事务控制的应用程序,如银行系统、库存管理等;
- Elasticsearch:擅长海量数据的搜索、分析、计算,更适合于日志分析、网站搜索、监控数据存储等对搜索性能要求较高的场景。