【发布时间】:2019-09-12 07:56:17
【问题描述】:
我正在尝试将 H2 数据库和 Ignite 上的应用程序查询性能与 Oracle 基线进行比较。
我创建了一个测试,包括:
- 一组表和索引。
- 随机生成数据的数据集,每个表有 50k 条记录。
- 具有 1 个 INNER 和 10 个 LEFT OUTER 联接的查询(查询返回大约 188k 条记录)。
我注意到性能方面存在显着差异。
在我的机器上运行查询(i5 双核,16Gb RAM):
- Oracle 设法在大约 350 毫秒内运行此查询。
- H2 需要 4.5 秒(无论模式如何 - 服务器和内存)。
- 点燃需要 9 秒。
遍历 JDBC 结果集:
- H2 内存模式少于 50 毫秒
- H2 服务器模式大约需要 2 秒
- Oracle 大约 5 秒
- Ignite 大约 1 秒
几个问题:
- 这些数字有意义吗?我是不是错过了 H2 查询优化的基础知识?
- 看H2解释计划,scanCount的确切含义是什么?对于给定的查询和数据集或性能指标,这是不变的吗?
- 有没有办法通过调整索引或提示查询来提高 H2 性能?
- 如何解释 Ignite 和 H2 之间的区别?
- 连接的顺序重要吗?询问是因为在 Oracle 上,拥有最新的统计信息,CBO 会更改连接的顺序。我没有注意到 H2 的这种行为。
我用于此测试的查询和数据在 Github 上的 here 可用。
谢谢, L.
【问题讨论】:
标签: h2 ignite query-performance