2022-09-05 对于IN操作符的优化的调研

摘要:

调研主流的关系型数据库和列式的OLAP数据对于IN操作符的优化策略, 为下一步设计IN操作符优化的简要设计提供理论上的依据。

需求推定可参考:2022-09-02 mysql/stonedb-现有加载pack数据模块分析及需求推定_帝尊悟世的博客

调研数据库

关系型:

  1. Mysql8.0.30​​Release mysql-8.0.30 mysql/mysql-server GitHub​​
  2. Postgres​​https://github.com/postgres/postgres/releases/tag/REL_14_5​​

列式OLAP数据库:

  1. ClickHouse​​https://github.com/ClickHouse/ClickHouse/releases/tag/v22.8.4.7-lts​​
  2. StarRocks​​https://github.com/StarRocks/starrocks/releases/tag/2.3.1​​
  3. MraiaDB ColumnStore​​https://github.com/MariaDB/server/releases/tag/mariadb-10.10.1​​

调研要点:

  1. 对IN操作符的常规优化策略, 在不同的抽象层次上是如何优化的
  2. IN操作符的场景可划分为哪些,每种场景可针对哪些具体的优化策略
  3. 可牺牲事务
  4. 列存储的数据库, 如何实现并行的能力,主要以CH为要点

调研的方式:

一. 通过阅读网上的文章, 有粗糙的理解

这种做法的缺点在于

  1. 相关模块的分析不一定存在
  2. 相关点的分析可能是错的

二. 阅读相关书籍, 体系化的去理解

缺点也在于不一定有对应模块和设计的讲解, 纸上谈兵的分析就是废物。

可参考的书有:

  1. 《数据库查询优化器的艺术:原理解析与SQL性能优化》
  2. 《mysql8查询性能优化》

三. 直接阅读对应数据库的代码

缺点在于:

  1. 不一定能快速的理解对应模块的实现
  2. 需要大量的精力和细节来理解细节设计